2

私は次の3つのモデルを持っています:

場所hasManySportTypehasMany Sport、次にSportbelongsToSportTypebelongsToロケーション

SportTypeモデルでは、belongsToLocationの条件は'Location.status' => trueであるため、Locationステータスがtrueのレコードのみを取得します。正常に動作します。

Sportモデルの単純な古いfind()を介してレコードを取得する場合、関連付けられたSportTypeの関連付けられたLocationがfalseであるレコードは返されないと思いますが、そうではありません。

コントローラーで包含可能な動作または明示的に構築された結合を使用して、必要なものを取得できると思いますが、これが純粋にモデルの関係を通じて実現できるものかどうか疑問に思っています。おそらくそうではありません。

4

1 に答える 1

1

検索を実行しているモデルを使用Joinsまたは変更して、制限モデル (つまりLocation) を介して実行できます。

$this->Location->find('all', array(
    'conditions' => array(
        'Location.status' => true
    ),
    'contain' => array(
        'SportType' => array(
            'Sport'
        )
    )
));

ただし、含まれるモデル内の条件に基づいて検索モデルの結果を絞り込むことはできません。

アップデート:

Join を使用すると、Contain とは対照的に、他のモデルに条件を追加することもできます。

また、JOIN はより複雑なクエリを 1 つ実行しますが、contain はより単純なクエリを多数実行します...データベース構造によっては、それが考慮される可能性があります。

要するに、それは好みです-どちらも問題なく、どちらがうまくいくかは素晴らしいです.

于 2013-02-16T06:10:09.890 に答える