проблема с расширенными отношениями с использованием codeigniter и datamapper - PullRequest
1 голос
/ 26 августа 2011

у меня есть три таблицы customer, order и user - user - это таблица входа в систему, а customer хранит информацию об адресе и т. Д.

CREATE TABLE IF NOT EXISTS `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `customer_id` int(11) NOT NULL,
  `image_path` varchar(100) NOT NULL,
  `sample_path` varchar(255) NOT NULL,
  `status` enum('new','progress','completed','sent') NOT NULL,
  `placed` date NOT NULL,
  `updated_date` date NOT NULL,
  `will_send` int(1) NOT NULL,
  PRIMARY KEY (`id`)
) 


CREATE TABLE IF NOT EXISTS `customers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `name` varchar(150) NOT NULL,
  `address_1` varchar(150) NOT NULL,
  `address_2` varchar(150) NOT NULL,
  `address_3` varchar(150) NOT NULL,
  `postcode` varchar(50) NOT NULL,
  `phone` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ;


CREATE TABLE IF NOT EXISTS `users` (
  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `group_id` mediumint(8) unsigned NOT NULL,
  `ip_address` char(16) NOT NULL,
  `username` varchar(15) NOT NULL,
  `password` varchar(40) NOT NULL,
  `salt` varchar(40) DEFAULT NULL,
  `email` varchar(100) NOT NULL,
  `activation_code` varchar(40) DEFAULT NULL,
  `forgotten_password_code` varchar(40) DEFAULT NULL,
  `remember_code` varchar(40) DEFAULT NULL,
  `created_on` int(11) unsigned NOT NULL,
  `last_login` int(11) unsigned DEFAULT NULL,
  `active` tinyint(1) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`)
)  ;

моя проблема заключается в том, что идентификатор из таблицы user является основнымодин - это относится к клиенту (как user_id), затем клиент относится к заказу

, что я хочу сделать, чтобы у моей таблицы заказов была связь на основе customer_id как в заказах, так и в клиентах

у меня естьпопробовал это -

var $has_one = array(
                    'customer' => array('join_self_as'=>'customer','join_other_as' => 'user')
                    );

, но это не работает, поскольку он производит следующий запрос - который ссылается на customer.id вместо customer.user_id

SELECT * FROM `customers` LIMIT 1 
0.0004       SELECT `customers`.*
FROM (`customers`)
LEFT OUTER JOIN `orders` orders ON `customers`.`id` = `orders`.`customer_id`
WHERE `orders`.`id` = 27 

, надеюсь, это объясняет, что я пытаюсь сделать

1 Ответ

0 голосов
/ 26 августа 2011

Я не думаю, что вы хотите присоединиться как переменная ... Я думаю, что вы хотите запрос глубокой связи.

Вы можете сделать это ..

$order = new Order();
$order->include_related('customer/user', *, true, true)->get();

Затем вы можете получить доступ к пользователю следующим образом:

$order->customer->user->name;

То есть, если я правильно понимаю вашу проблему.

...