joinsの設定を使う場合

メモ。
pagerやfindでデータを抽出する設定$optionsで、joinsによりINNER JOINなどを行う場合、
database.phpにてテーブルのprefixを設定すると正しく動かなくなる。


その対策。



ソースざっと追いましたが、原因は不明。
ただとにかく、joinsに、table_prefix設定が自動反映される仕組みがない模様。


table_prefixは、dispatcher実行以後に $this->Model->tablePrefix で取得できる様になるので、find()の直前か、あるいはbeforeFilterなどで設定します。

function beforeFilter() {
	// tablePrefixのためここでSET
	$this->options['joins'] = array_merge($this->options['joins'], array(
		array('type' => 'INNER',
			'table' => '`' . $this->Information->tablePrefix.'information`',
			'alias' => 'Information',
			'conditions' => '`Geocode`.`id`=`Information`.`geocode_id`',
		),
	));

	parent::beforeFilter();
}


参考サイト*1
http://blog.ksweb-design.com/cakephp/386.html

*1:joinsにtable_prefixが入らないのは、自分でやってみて気がついた・・・