#php #activerecord #cakephp
#php #activerecord #cakephp
Вопрос:
У меня есть 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’ в ‘предложении on’
Как я могу присоединиться к таблице hasMany после того, как она уже была включена в запрос сборки?
Приветствия
Комментарии:
1. Возможно, здесь я ошибаюсь — обычно я использовал два левых соединения для эмуляции habtm (что вы, похоже, делаете здесь — сообщение пользователям habtm)
Ответ №1:
Я стремился решить эту проблему, фактически привязывая связь к коду по ходу работы. Это хакерский метод и довольно старый, всего 1.2.
Это было использование, bindModel()
о котором вы можете прочитать здесь, http://book.cakephp.org/view/3/The-Manual #!/view/78/Ассоциации-Связывание-моделей-вместе
Документация по методу model находится здесь, http://api12.cakephp.org/class/model#method-ModelbindModel
Идея в основном заключается в том, что вы можете временно связать две модели вместе, даже если никакой связи не существует, или если они имеют отдаленную связь. Я это сделал, и это действительно работает. У меня где-то есть некоторый код, но его нет под рукой.
Также, если вы используете более новые материалы, обязательно ознакомьтесь Containable()
поскольку это, насколько я понимаю, включает в себя немного больше привязок модели. http://book.cakephp.org /#!/view/1323/Вместимый
Ответ №2:
Я не уверен, насколько хорошо я объяснил себя.
Вероятно, мне следовало бы разбить проблему на точные взаимосвязи:
Сообщение имеет много библиотекарей
,
это означает, что я могу настроить recursive = 2
получение пользовательских данных.
Конечно, это дорого, но в данном случае это естественная вещь.