相关模型中可容纳的意外行为

时间:2011-04-24 23:29:51

标签: cakephp has-and-belongs-to-many

我们有Ebooks HABTM标签。我们尝试选择属于ID为160的标签的电子书。

两者都使用可包含的行为,所以在Ebooks Controller中我写了以下内容:

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

根据这本书,这应该返回所需的结果。而不是那样,所有电子书的列表都会被退回。

另请注意,运行两个查询,第一个返回所有Ebooks的列表,第二个返回应返回的电子书。有没有人有任何想法?

提前致谢

1 个答案:

答案 0 :(得分:2)

是的,此查询显示“查找所有电子书,并随身携带所有ID为160的标签
contain不限制主要结果,仅限制相关结果。

您需要为HATBM表创建一个SQL JOIN并在其上过滤主要结果,如下所示:

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