Содержимое неожиданного поведения в связанных моделях - PullRequest
0 голосов
/ 25 апреля 2011

У нас есть тэги Ebooks HABTM.И мы пытаемся выбрать Ebooks, которые принадлежат тегу с id = 160.

Оба используют сдерживаемое поведение, поэтому в контроллере Ebooks я написал следующее:

$this->Ebook->contain('Tag.id = "160"');
$ebooks = $this->Ebook->find('all');

Согласно книге это должно вернуть нужный результат.Вместо этого возвращается список всех электронных книг.

Обратите также внимание, что выполняются два запроса: первый возвращает список всех электронных книг, а второй - электронные книги, которые должны быть возвращены.У кого-нибудь есть идеи?

Заранее спасибо

1 Ответ

2 голосов
/ 25 апреля 2011

Да, этот запрос говорит "Найти все электронные книги и включить в них все теги с идентификатором 160" .
contain не ограничивает первичный результат, только связанные результаты.

Вам необходимо создать SQL JOIN для таблицы HATBM и отфильтровать по ней первичные результаты, например:

$this->Ebook->bindModel(array('hasOne' => array('EbooksTag')));
$this->Ebook->find('all', array(
    'conditions' => array('EbooksTag.tag_id' => 160)
));
...