CakePHP HABTM Фильтрация - PullRequest
       8

CakePHP HABTM Фильтрация

1 голос
/ 21 декабря 2010

У меня есть две таблицы - users и servers, а для отношения HABTM users_servers.Пользователи HABTM серверов и наоборот.

Я пытаюсь найти способ для Cake выбрать серверы, которым назначен пользователь.

Я пытаюсь что-то вроде $this->User->Server->find('all');, котороепросто возвращает все серверы, независимо от того, принадлежат ли они пользователю.

$this->User->Server->find('all', array('conditions' => array('Server.user_id' => 1))) просто выдаёт неизвестную ошибку SQL столбца.

Я уверен, что упускаю что-то очевидное, но простонужен кто-то, чтобы указать мне правильное направление.

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 декабря 2010

Ваши имена таблиц верны.Есть много способов сделать это:

Использовать поведение Containable

В вашей AppModel установите следующее:

 var $recursive = -1;
 var $actsAs = array('Containable');

Затем используйтеследующий код для запроса ваших серверов:

$userWithServers = $this->User->find('all', array(
    'conditions' => array('User.id' => 1),
    'contain' => array('Server')
));

Обратите внимание, что мы запрашиваем модель User вместо модели Server, чтобы выполнить это.

Используйте bindModel

$this->Server->bindModel(array('hasOne' => array('UsersServer')));
$this->Server->find('all', array(
    'fields' => array('Server.*'),
    'conditions' => array('Server.user_id' => 1)
));

Лично я не рекомендую часто использовать bindModel.В конце концов, ваш код становится немного неуправляемым.Вы должны по возможности использовать контейнерное поведение.Код выглядит чище и проще.Подробнее о методе bindModel можно узнать здесь .

HTH.

0 голосов
/ 21 декабря 2010

Я думаю, вы должны назвать тур-таблицу user_servers.

...