0

この質問の目的のために、これはアソシエーションツリー(すべての->意味hasMany)であり、すべてのデータベース構造コードはCakePHPの規則に準拠しています。

Forum -> Section (forum_id) -> Topic (section_id) -> Reply (topic_id)

$this->Reply->find特定の条件でクエリを実行したいのですが、返された$data["Reply"]配列が、それらが属する応答のみを返すようにしたいのforum_id=Xです。

たとえば、特定の条件でaを実行すると(これらは関係ありません)、異なる親で2つの結果が返され、 (または)に$this->Reply->find到達するまで上下に移動すると、が異なります。Forum.idSection.forum_idforum_id

私が欲しいのは、結果が特定のに属するように結果をフィルタリングすることforum_idです。はモデル自体forum_idのフィールドではなく、 (2つの「レイヤー」の上の)フィールドであるため、エントリを使用して結果をフィルタリングすることはできません。ReplySectionconditions

私は何をすべきか?

4

1 に答える 1

2

このように簡単です:

<?php
$this->Reply->find('all', array(
    'joins' => array(
        Reply::joinLeft('Topic'),
        Topic::joinLeft('Section'),
        Section::joinLeft('Forum'),
    ),
    'conditions' => array('Forum.id' => $forumId),
));

https://github.com/tigrang/EasyJoin-これにより、モデル間の関係が決定され、結合配列が作成されます。

プラグインを使用したくない場合は、joins配列を手動で指定するか、モデルを再バインドしてContainableを使用できるようにする必要があります。これは、現在、結合ではなく複数のクエリを作成するためです。

于 2012-08-11T06:22:53.827 に答える