Поиск цепочки моделей CakePHP

У меня есть объект $this->user модели User. Этот объект заполняется $this->Auth->user в моем контроллере приложения следующим образом:

$this->user = ClassRegistry::init('User');
$this->user->set($this->Auth->user);

Работает как шарм. Если я распечатаю $this->user в моем контроллере, это даст мне:

User Object ( [validate] => Array ( blah blah blah

Типичный объект. Теперь у меня есть модель Group, которая принадлежит User, и у пользователей много групп. Эти переменные правильно установлены в моделях. Теперь я хочу найти все группы для этого конкретного пользователя, который вошел в систему. Поэтому я попробовал это:

$groups = $this->user->Group->find('list', array('fields'=>array('id', 'group_name')))

Суть в том, что я хочу использовать $this->user для автоматической фильтрации группового запроса на основе owner_id в $this->user. Для меня имеет смысл, что если у меня есть конкретный объект, представляющий пользователя, и я делаю групповой запрос на основе этого пользователя... он должен возвращать только соответствующие группы.

Проблема в том, что $groups содержит все записи в таблице Groups, а не те, которые мне нужны только от текущего пользователя. Я не понимаю, зачем мне нужно добавлять параметр "conditions"=>"user_id"=$this->Auth->user('id') в функцию поиска, потому что я уже указал, какого пользователя я использую через цепочку моделей.

Любые идеи, почему это не работает? Статус sql, который он запускает, - это просто SELECT для групп, WHERE 1 = 1 (поэтому вообще не фильтруется).


person MikeMurko    schedule 26.08.2011    source источник


Ответы (1)


Нет, объект User действительно больше похож на класс, чем на объект. Вы можете сказать, что Cake не полностью реализует шаблон Active Record (я думаю, Cake 3.0 может исправить это, но не уверен). Так что да, вам все равно нужно задать условие для находки. И вам не нужно устанавливать ($this->Auth->user);

Вы, вероятно, не очень хорошо знакомы с Cake: в Cake вам почти никогда не приходится создавать экземпляры объектов Model. Они создаются для вас на основе текущего контроллера и отношений модели, которые вы указываете.

person Anh Pham    schedule 26.08.2011
comment
Хорошо, спасибо за ваш ответ. Я все еще учусь торту, да. Единственная причина, по которой я создал экземпляр этой переменной, заключается в том, что я хотел использовать ее таким образом - поскольку это невозможно, тогда вы правы - мне это не нужно. - person MikeMurko; 26.08.2011