【问题标题】:Containable unexpected behavior in related models相关模型中可包含的意外行为
【发布时间】:2011-04-24 23:29:51
【问题描述】:

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

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

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

根据本书,这应该返回所需的结果。取而代之的是所有电子书的列表。

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

提前致谢

【问题讨论】:

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


    【解决方案1】:

    是的,此查询表示“查找 所有 电子书并在其中包含 ID 为 160 的所有标签”
    contain 不限制主要结果, 只有相关结果。

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

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

    【讨论】:

    • 感谢您的回答。这让我的生活更轻松!
    • 这可以用作解决我的问题here的更简单的方法吗?
    • @Dave HABTM 关系很难查询。要记住的规则是,Cake 会在“主要”查询(包含条件的那个)中自动为 belongsTo 和 hasOne 关系创建 JOIN,而 hasMany 和 HABTM 关系将分别查询(必要时,因为它们返回超过一行)。有时更容易明确指定joins,有时更容易绑定模型,有时更容易从其他模型查询。继续玩它。 :)
    猜你喜欢
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多