CakePHP объединяет таблицы, когда существует связь - PullRequest
1 голос
/ 27 апреля 2011

У меня есть Message модель, которая имеет много Librarian.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь присоединить таблицу к таблице Librarian, эта таблица еще не была присоединена - т. Е. Создаваемое мной соединение появляется до , создается соединение отношений .

$this->Message->find('all', array(
  'joins' => array(
    array(
      'table' => 'users',
      'alias' => 'User',
      'conditions' => array('User.id = Librarian.id')
    )
  )
));

Это создает запрос по следующим направлениям:

SELECT `Message`.`id`, `Message`.`librarian_id`, 
   `Message`.`Librarian`.`id`, `Librarian`.`user_id` 
    FROM `contact_messages` AS `Message` 
    INNER JOIN users AS `User` ON (`User`.`id` = `Librarian`.`user_id`) 
    LEFT JOIN `librarians` AS `Librarian` 
    ON (`Message`.`librarian_id` = `Librarian`.`id`)  
    WHERE `Message`.`id` = 3

Я получаю ошибку

Неизвестный столбец 'Librarian.user_id' в 'предложении'

Как я могу присоединиться к таблице hasMany после того, как она уже была включена в запрос на сборку?

Приветствия

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Я имел тенденцию решать это, фактически связывая отношения с кодом по мере продвижения.Это хакерский метод, довольно старый, очень 1.2.

Он использовал bindModel(), о котором вы можете прочитать здесь, http://book.cakephp.org/view/3/The-Manual#!/view/78/Associations-Linking-Models-Together

Документация для метода модели здесь, http://api12.cakephp.org/class/model#method-ModelbindModel

Идея в основном заключается в том, что вы можете временно связать две модели вместе, даже если нет отношений или если они имеют отдаленные отношения.Я сделал это, и это работает.У меня где-то есть код, но не для раздачи.

Также, если вы используете более новые вещи, обязательно посмотрите Containable(), так как это, насколько я понимаю, охватывает немного больше привязок модели.http://book.cakephp.org/#!/view/1323/Containable

0 голосов
/ 28 апреля 2011

Я не уверен, насколько хорошо я объяснил себя.

Я, вероятно, должен был разбить задачу на точные отношения:

Сообщение hasMany Библиотекарь
Библиотекарь принадлежит Пользователь

, что означает, что я могу установить recursive = 2 чтобы получить данные пользователя .

Конечно, это дорого, но в данном случае это нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...