HasAndBelongsToMany in CakePHP - PullRequest
1 голос
/ 13 мая 2010

У меня есть три модели со связанными свойствами:

Ссылки Модель:

var $belongsTo = array('LinkCategory');

LinkCategory Модель:

var $hasMany = array('Link');
var $hasAndBelongsToMany = array('User');

Модель пользователя

var $hasAndBelongsToMany = array('LinkCategory');

При этом я ожидал бы, что следующее даст мне все категории ссылок для пользователя.

$user_link_categories = $this->LinkCategory->find('all', array('conditions' => array('User.id' => 1)));

Однако он умирает с: Неизвестный столбец 'User.id' в 'предложении where' Запрос: ВЫБРАТЬ LinkCategory. id, LinkCategory. title, LinkCategory. created, LinkCategory. modified ОТ link_categories КАК LinkCategory ГДЕ User. id = 1

Я новичок в CakePHP, но не MVC. На мой взгляд, это должно работать, учитывая мои ассоциации. Я что-то пропустил или это почему-то не работает в CakePHP.

Ответы [ 2 ]

0 голосов
/ 14 мая 2010

У меня есть три модели со связанными свойствами:

Ссылки Модель :

Должно быть Link модель, а не Links . Я надеюсь, что это была опечатка.

LinkCategory Модель :

...

var $ hasAndBelongsToMany = array ('User');

Полагаю, это означает, что у вас есть таблица соединений link_categories_users, и поэтому вам необходимо изменить рекурсивное значение на 2:

$user_link_categories = $this->LinkCategory->find('all', array('recursive' => 2, 'conditions' => array('User.id' => 1)));

Или: * +1028 *

$user_link_categories = $this->LinkCategory->find('all', array('recursive' => 2, 'conditions' => array('LinkCategoryUser.user_id' => 1)));

Или:

$user = $this->User->find('first', array('recursive' => 2, 'conditions' => array('User.id' => 1)));

Обновление . Это должно работать:

$user_link_categories = $this->LinkCategory->User->find('all', array('conditions' => array('User.id' => 1)));
0 голосов
/ 13 мая 2010

LinkCategory не имеет поля User.id ... на самом деле, способ User.id с точкой в ​​середине предполагает, что id - это поле, которое принадлежит User.

Поскольку LinkCategory belongsTo a User, оно, вероятно, имеет поле user_id, поэтому теоретически это должно работать:

$user_link_categories = $this->LinkCategory->find('all', array('conditions' => array('user_id' => 1)));

Если это все еще не работает, это означает, что в ваших таблицах БД нет столбцов для поддержки этих отношений, и вам нужно прочитать больше об ассоциациях , чтобы разобраться в этом. *

Хотя лично я думаю, что вы идете назад. Вы пытаетесь найти LinkCategory на основе связанных с ним User, но вы не можете использовать поле другой модели (User), например, в простом find() (на LinkCategory).

Вместо этого вы должны найти пользователя с id из '1', а затем - с User belongsTo a LinkCategory - прочитать это User s LinkCategory. Опять же, я ржавый, но думаю, это будет выглядеть примерно так ...

$user = $this->User->find('first', array('conditions' => array('Article.id' => 1)));
pr($user);

... сделайте так, чтобы recursive (см. здесь ) и $user также загрузили бы LinkCategory.

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