アソシエーション先のテーブルデータの取得で

2007/07/21 | cakePHP

cakePHPのすごいところは、SQLを書かなくてもテーブルからデータを持ってくるところだけど、もっとすごいのは設定さえ書いておけば、リレーション先のテーブルからもデータを持ってきてしまうところ。ここ数日cakePHPをつってCMSを作っているけど、SQLをまったく書かなくていい、というのもすごい話だ。

リレーション先のデータを取得するための設定はcakePHPではアソシエーションというが、これをモデルで設定することは前に書いた。モデル(クラス)内で、

var $hasMany=array();

と記述するのだが・・・、この記述、PHPの約束事で、演算はおこなえないのだ。今回の場合、古いデータは必要ないので当該日以降のデータだけ取得したかった。つまり、アクセスするたびに関数で取得条件が変えたい、というわけだが、演算子が使えないのでモデル内で設定が出来ないのだ。
こんな場合は、コントローラ内で、以下のように記述することで対応できた。

$this->[モデル名]->hasMany[‘関連先モデル名’][‘conditions’]=”条件”;

コントローラ内で、モデルで設定した$hasManyを上書きするのだ。なんとなく「無理やり」の感もあるし、これでいいのかどうかわからないが、うまくデータは取得できている。いい感じ。

慣れると割りと使いやすい、cakePHP。もう少しがんばって、一つサイトを構築してしまおう。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net