CakePHPのhasManyでINNER JOIN設定

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をちゃんと指定してあげる事です。


今回のサンプルは非常に簡単なものですが、

複雑な処理になるとやっぱり直クエリ書いた方がよいですね。


コメントを残す




Menu

HOME

 TOP