CakePHP 関連付けされていないモデルでfindする

PHP

CakePHP 関連付けされていないモデルでfindする

Nutrient(栄養)とFood(食べ物)というモデルがあった場合、何らかの理由があって、hasManyなどの関連付けがあらかじめされていなかったとします。

その場合、nutrients_controller.php内で

 $this->Nutrient->Food->find(
 		'all',
 	array(
 		'conditions' =>  array('Food.name' => rice ))
 		);

などとやっても当然Foodが見つからないので結果が帰ってきません。

そんな時は、一時的にbindModelという関数を利用して関連付けを設定することができます。

 $this->Nutrient->bindModel(
 				array('hasMany'=>array(
 					'Food'=>array(
 						'className'=>'Food'
 							)
 						)
 					)

);

このようにbindModelを設定してからすぐに最初のfindを実行すると、結果が表示されます。

CakePHP 公式 その場でアソシエーションを生成、廃棄
http://book.cakephp.org/1.3/ja/view/1045/%E3%81%9D%E3%81%AE%E5%A0%B4%E3%81%A7%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E7%94%9F%E6%88%90-%E5%BB%83

ちなみに、この方法は何らかの理由で関連付けされていないモデルを利用する時のものなので、たとえばFoodにnutrients_idというフィールドがないといけません。

ただ単に、違うモデルを一時利用したい場合は、下記を参照してください。
CakePHP 一時的に違うモデルを利用する

カテゴリーPHP

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です