回答編集履歴

2 containで無駄にReserveを取得していたのを修正

退会済みユーザー

退会済みユーザー

2016/01/15 16:16  投稿

「hasMany先のテーブルに条件を指定してもメインテーブルの取得件数は変わらない、
なので結合後にhasMany先のテーブルの条件で絞りたい」ということでいいですかね?
こんなのでどうでしょう?
JOINの後、WHEREで絞込を行います。
ReserveのデータはJOINで取得しているのでContainは空を指定して下さい。
代わりにfieldsで欲しいカラムを指定します。
```PHP
// コントローラー
$condition = array( 'limit'     => 20
                  , 'order'     => array('Customer.id DESC')
                  , 'contain'   => array('Reserve')
                  , 'conditions' => array('Reserve.start >= ?' => date('Y-m-d H:i:s')) // ここがWHERE文になる
                  , 'joins'     => array(array( 'table'      => 'reserves'
                  , 'order'     => array('Customer.id DESC')
                  , 'contain'   => array()
                  , 'fields'    => array('Customer.id', 'Reserve.id')
                  , 'conditions' => array('Reserve.start >= ?' => date('Y-m-d H:i:s'))
                  , 'joins'     => array(array( 'table'      => 'reserves'
                                                , 'alias'      => 'Reserve'
                                                , 'type'       => 'LEFT'
                                                , 'conditions' => array('Customer.id = Reserve.customer_id'))));
```
1 推敲

退会済みユーザー

退会済みユーザー

2016/01/15 16:00  投稿

「hasMany先のテーブルに条件を指定してもメインテーブルの取得件数は変わらない、
なので結合後にReserveの条件で絞りたい」ということでいいですかね?
なので結合後にhasMany先のテーブルの条件で絞りたい」ということでいいですかね?
こんなのでどうでしょう?
```PHP
// コントローラー
$condition = array( 'limit'     => 20
                  , 'order'     => array('Customer.id DESC')
                  , 'contain'   => array('Reserve')
                  , 'conditions' => array('Reserve.start >= ?' => date('Y-m-d H:i:s')) // ここがWHERE文になる
                  , 'joins'     => array(array( 'table'      => 'reserves'
                                                , 'alias'      => 'Reserve'
                                                , 'type'       => 'LEFT'
                                                , 'conditions' => array('Customer.id = Reserve.customer_id'))));
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る