Cakephp 相关模型中可包含的意外行为

Cakephp 相关模型中可包含的意外行为,cakephp,has-and-belongs-to-many,Cakephp,Has And Belongs To Many,我们有电子书HABTM标签。我们尝试选择那些属于id=160标签的电子书 两者都使用可包含的行为,因此我在电子书控制器中编写了以下内容: $this->Ebook->contain('Tag.id = "160"'); $ebooks = $this->Ebook->find('all'); 根据这本书,这应该返回所需的结果。取而代之的是,一份所有电子书的列表被退回 还请注意,将运行两个查询,第一个查询返回所有电子书的列表,第二个查询返回应返回的电子书。有人知道吗 提前

我们有电子书HABTM标签。我们尝试选择那些属于id=160标签的电子书

两者都使用可包含的行为,因此我在电子书控制器中编写了以下内容:

$this->Ebook->contain('Tag.id = "160"');
$ebooks = $this->Ebook->find('all');
根据这本书,这应该返回所需的结果。取而代之的是,一份所有电子书的列表被退回

还请注意,将运行两个查询,第一个查询返回所有电子书的列表,第二个查询返回应返回的电子书。有人知道吗

提前感谢

是的,此查询显示“查找所有电子书,并包括id为160的所有标签”。
contain
不限制主要结果,只限制相关结果

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

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

谢谢你的回答。这让我的生活更轻松!这可以作为一种更简单的方法来解决我的问题吗?@Dave HABTM关系很难查询。需要记住的规则是,Cake将在“主”查询(包含条件的查询)中自动为belongsTo和hasOne关系创建联接,而hasMany和HABTM关系将分别查询(根据需要,因为它们返回多行)。有时显式地指定
连接更容易,有时绑定模型更容易,有时从另一个模型查询更容易。继续玩弄它。:)