CakePHPのアソシエーション。
これ結構楽にテーブル連結できますよね。
hasOneとbelongsToに関しては、アソシエーション設定時に
typeをINNERに指定すればよいだけですが、hasManyにはそんなものはございません。
なので、力技でINNER JOIN連結設定。
前提条件
CakePHP1.3
Postgres8.1
以下サンプルです。
Columnテーブルに複数のColumnInfoテーブルが紐付いており
Column.id = ColumnInfo.column_idがマッチするデータのみ取得。
※Column.idが主キー
※ColumnInfo.column_idが外部キー
$options = array(); $options['fields'] = array('Column.*', 'ColumnInfo.*'); $options['joins'][] = array( 'type' => 'INNER', 'alias' => '', 'table' => '', 'conditions' => array('Column.id = ColumnInfo.column_id') ); $res = $this->Column->find('all', $options);
ポイントはjoins使う場合は、fieldsをちゃんと指定してあげる事です。
今回のサンプルは非常に簡単なものですが、
複雑な処理になるとやっぱり直クエリ書いた方がよいですね。