アソシエーション先のテーブルデータの取得で
2007/07/21 | cakePHP
cakePHPのすごいところは、SQLを書かなくてもテーブルからデータを持ってくるところだけど、もっとすごいのは設定さえ書いておけば、リレーション先のテーブルからもデータを持ってきてしまうところ。ここ数日cakePHPをつってCMSを作っているけど、SQLをまったく書かなくていい、というのもすごい話だ。
リレーション先のデータを取得するための設定はcakePHPではアソシエーションというが、これをモデルで設定することは前に書いた。モデル(クラス)内で、
var $hasMany=array();
と記述するのだが・・・、この記述、PHPの約束事で、演算はおこなえないのだ。今回の場合、古いデータは必要ないので当該日以降のデータだけ取得したかった。つまり、アクセスするたびに関数で取得条件が変えたい、というわけだが、演算子が使えないのでモデル内で設定が出来ないのだ。
こんな場合は、コントローラ内で、以下のように記述することで対応できた。
$this->[モデル名]->hasMany[‘関連先モデル名’][‘conditions’]=”条件”;
コントローラ内で、モデルで設定した$hasManyを上書きするのだ。なんとなく「無理やり」の感もあるし、これでいいのかどうかわからないが、うまくデータは取得できている。いい感じ。
慣れると割りと使いやすい、cakePHP。もう少しがんばって、一つサイトを構築してしまおう。