こんにちは。ファガイです。
本日はORMで詰まった所を書きます。軽く書くので、フォーマットはあまりきにしてません。
Ormのfindの挙動がおかしい
例として、Model_Site_MasterというModelがあるとします。
'site_id', 'user_id', 'category_id', 'name', 'url', 'description',
上記のようなカラムがあるとします。primary keyはsite_idとuser_idです。
その際にfuelphpのmodel app\model\site\master.phpにはprimary keyを設定していました。
protected $_primary_key = array('site_id', 'user_id');
そして、このModel_Site_Masterは$site_idのみの指定での更新があるとします。
どうにかfindで取ってきてsaveをしたかったのですが、結論的には取ってこれませんでした。メソッドを変えなきゃ厳しいのかもしれません。
なぜメソッドを変えないと無理なんじゃないかというと。
findメソッドで呼び出しているにもかかわらず、Modelオブジェクトが帰ってこない
一番最初の頃は以下としていました。
$site_id = 1;
$query = Model_Site_Master::query()->where("site_id", $site_id)->get_one();
$record = Model_Site_Master::find(array($site_id, $user_id));
一応これで取ってこれるのですが、2回queryを投げることになるのでコレは気持ち悪い、と。
そして、マニュアルを見てコレなら出来るかなと思った。
$site_id = 1;
$record = Model_Site_Master::find("all", array(
'where' => array('site_id', $site_id)
));
コレで出来ると思ったら、大間違いだった。
Orm\Queryオブジェクトが返ってきた。
現状では出来なさそうなので、自分はprimary keyをsite_idだけにして、user_idが必要な場合はwhereで指定する形に変更。
一旦はこれで対応したんですが、もしかしたら1.6で改善されてるのかな・・・。
コメント