CakePHP: условия с hasMany - PullRequest
       0

CakePHP: условия с hasMany

2 голосов
/ 24 августа 2011

У меня есть модель блога, которая определила var $ hasMany = array ("Comment");

Как применить фильтр к комментариям, чтобы выбрать только те элементы блога, которые соответствуют определенной категории комментариев?

Если в модели блога я сделаю

$this->recursive=2;
$this->hasMany=array("Comment");  //in Comment i have $belongsTo("Blog")
return $this->find("all",array("conditions"=>array("Comment.comment_type_id"=>123)));

я получаю сообщение об ошибке, в котором говорится о неизвестном столбце Comment.comment_type_id, поскольку Cake не создает соединение.

Я думаю, что это довольно распространенная проблема, поэтому я считаю, что ее легко решить, но я не могу найти хороший способ

Ответы [ 2 ]

8 голосов
/ 06 октября 2011
 $this->bindModel(array(
    'hasMany' => array(
        'Comment' => array(
            'conditions' => array('Comment.comment_type_id' => 123)
         ))));
$this->find('all');

или если модель уже связана с комментарием, используйте:

$this->hasMany['Comment']['conditions'] = array('Comment.comment_type_id' => 123);
$this->find('all');
2 голосов
/ 24 августа 2011

Вы можете работать в обратном порядке и выбрать все комментарии в определенной категории и включить в блог посты, на которые они были опубликованы.Я не могу найти его в данный момент, но я почти уверен, что видел в документах «рекомендуемый» подход, и в этом относительно простом случае этого вполне может быть достаточно.Это определенно то, что я попробую в первую очередь.

Вы также можете использовать сдерживаемое поведение и установить условие для включения Comment, но это вернет все сообщения в блоге и никаких комментариев, если категория комментариев не 'не соответствует тому, что вы после.Мне никогда не нравилось это решение, потому что оно кажется мне неуклюжим и неточным (хотя технически это не так).

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

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