5月 082013
 

こんにちは。ファガイです。

本日は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で改善されてるのかな・・・。

Pocket

 Posted by at 5:18 PM

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>


*