17563
CakePHPのアソシエーションについての質問です。  
モデルAから多対一の関係となるモデルBを取得する為にbelongsToのアソシエーションを設定  
しておくと  
モデルAでfind()する際にconditionsに"モデルB.name"といった条件で絞り込みを書けますが

モデルBと一対多の関係となるモデルCが有り、モデルB内でhasManyのアソシエーションを設定しておいても  
モデルAでfind()する際にconditionsに"モデルC.name"を指定するとエラー

Column not found: 1054 Unknown column 'モデルC.name' in 'where clause'

が発生してしまいます。  
recursiveは2に設定していて、モデルCをconditionsに書かなければ検索結果に  
モデルCのカラムが含まれています。

モデルA側からモデルCのカラムを指定したconditionsを書きたいのですが  
そのような方法はありますでしょうか。
CC BY-SA 3.0
2015-10-12T14:07:05.510
17560
2015-10-12T15:37:19.910
2015-10-12T14:40:08.000
11050
11050
question
cakephp
CakePHPで複数テーブルを繋げたアソシエーションで絞り込み条件を後から設定する方法
[Containable](http://book.cakephp.org/2.0/en/core-
libraries/behaviors/containable.html)
ビヘイビアをA,B,Cそれぞれのモデルに適用すると、比較的容易に階層が深いモデルについても絞り込みができるようになります。

```

    public $actsAs = array('Containable');
    
```

上記マニュアルページからサンプルコードを引用します。

```

    $this->User->find('all', array(
        'contain' => array(
            'Profile',
            'Account' => array(
                'AccountSummary'
            ),
            'Post' => array(
                'PostAttachment' => array(
                    'fields' => array('id', 'name'),
                    'PostAttachmentHistory' => array(
                        'HistoryNotes' => array(
                            'fields' => array('id', 'note')
                        )
                    )
                ),
                'Tag' => array(
                    'conditions' => array('Tag.name LIKE' => '%happy%')
                )
            )
        )
    ));
    
```

この例のモデル構成では `User` → `Post` → `Tag`
という親子関係が発生していますが、`User`から見て孫になっている`Tag`モデルに対して `conditions`
で抽出条件が記述されていることがわかるかと思います。

CakePHP 1.x 系でよければ和訳されたマニュアルもあります。  
[コンテイナブル — CakePHP Cookbook 1.3 ドキュメント](http://book.cakephp.org/1.3/ja/The-
Manual/Core-Behaviors/Containable.html)  
2.0系と大きく変わるところはないと思いますので理解のためには十分参考になるでしょう。
CC BY-SA 3.0
2015-10-12T15:37:19.910
17563
2015-10-12T15:37:19.910
10492
17560
answer