CakePHP Model Chain Найти - PullRequest
       8

CakePHP Model Chain Найти

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

У меня есть объект $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содержит все записей в таблице групп, а не те, которые я хочу только от текущего пользователя.Я не понимаю, почему мне нужно добавить параметр "conditions"=>"user_id"=$this->Auth->user('id') в функцию поиска, потому что я уже указал, какого пользователя я использую через цепочку моделей.

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

1 Ответ

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

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

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

...