東京うぇ部

PHPをメインにしたプログラム情報共有サイト

CakePHP

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

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

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

コメントを残す




このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事