tamulab.jp

tamulabはプログラミングのtipsやインターネット上で気になったことなどを書いてます

FuelPHP の ORM\Model での find(‘all’) について

calendar

reload

FuelPHP の ORM\Model での find(‘all’) について

FuelPHP 使ってますか?
今回はORM\Model を使っている時に find(‘all’) したときにつまづいたポイントをご紹介します。

とあるテーブルで find(‘all’) をしても結果レコードが1件しか取得されずおかしいなということに気が付きました。

このテーブルは郵便番号が入っているもので、郵便番号から住所検索するときに使うつもりでいました。通常は1つの郵便番号にたいして1つの住所情報だとおもうのですが、中には1つの郵便番号で60件くらいの住所が割り当てられていることもあります。

このとき、「複数の住所にマッチしたらその一覧を表示してユーザーに選択してもらう」というのをしたかったんですね。

モデルクラスで次のようなことをしてマッチしたレコードを全件取得できるつもりでした。

これで全件取得のはずでしたが、なぜか1件だけしか取得されないという事態に。

実はこのテーブルはこんな感じに主キー(primary key) を設定していなかったんですね。

ORM\Query クラスの hydrate() メソッドでは pk をキーにして配列を返すので、pk がないと2件目以降は配列に入ってこなかったのです。

テーブルに pk を追加して migrate しなおしたら問題なくマッチしたレコード全件を取得できるようになりました。

この記事をシェアする

about

Toru TAMURA

Toru TAMURA

PHP, Ruby などをあやつるWebエンジニアです。Amazon Web Service(AWS)のユーザーグループ JAWS-UG 島根支部所属 [詳細]