人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

CakePHP(1.1) の Model::generateList メソッド
(使い方は http://book.cakephp.org/ja/view/455/generateList をご覧下さい)
は、DBから簡単にキーと値の組み合わせのリストを生成してくれるので、大変重宝しております。
さて、使うにつれて、valuePath項目(値の方)に、2フィールドの値を連結して設定したくなります。
いろいろ調べたのですが、方法がわかりません。
どなたかご存知の方はいらっしゃいませんでしょうか?
よろしくお願い致します。

●質問者: ita07
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:CakePHP dB Model キー フィールド
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tdoi
●60ポイント

期待されている回答ではない気がしますが、コメントがあいていないのでこちらで失礼します。

おそらく、

$this->Model->generateListCombine(・・・・, array('column1', 'column2'));

のような形で、

array(1 => 'valueOfColumn1valueOfColumn2',
 2 => 'valueOfColumn1valueOfColumn2');

というようなデータを作成したいのだと思いますが、認識は正しいでしょうか?

結論からすると、該当する機能は提供されていないはずです。


というだけではなんなので、これを実現するとすると、以下のどれかかなと思います。

動作確認してないので、雰囲気だけつかんでもらえればという感じですが。

1.地道にControllerで作成する。

$items = $this->findAll(・・・);
$list = array();
foreach ($items as $item) {
 $list[] = $item['Model']['column1'] . $item['Model']['column2'];
}

2.ControllerでgenerateListを複数回実行してマージする。

$list1 = $this->generateList($conditions, $order,$limit, $keyPath, $valuePath1);
$list2 = $this->generateList($conditions, $order,$limit, $keyPath, $valuePath2);
$list = array();
foreach ($item1 as $key => $value) {
 $list[$key] = $value . $list2[$key];
}

参考

http://www.syuhari.jp/blog/archives/124


3.Modelに関数を追加する。

AppModel、あるいは、実際に作成したModelに複数カラムをマージしたリストを返す関数を作成する。

CakePHP1.2系列であれば、Behaviorとかにしてしまうと、Happyな人もいるかもですが、1.1だと、Modelに記述することになりそうですね。


4.フレームワークを拡張する。

実際に処理を行っているのは、model_php5.phpなどで定義されているgenerateListなので、これを上書きします。

app/model/model_php5.phpなどにコピーをおいて、編集したいところですが、ここではできないので、cake/libs/model/model_php5.phpを編集して、$vlauePathに配列を許可して、Set::extractを複数回してつなげる。

とかでしょうか。このあたりは、他での利用とかにもよるので、なんとも言えませんが。


5.Model::queryを使う

$list = $this->Model->query("SELECT id, CONCAT(column1, column2) ・・・");

あとはお好きなように・・・



どれを選ぶかですが、状況次第としか言えないです。

個人的には、いろんな箇所で需要があれば、4を選ぶと思います。

そうでなくて、特定のモデルだけであれば、3をとると思います。

テスト実装程度でよいのであれば、1を選びます。

2はまず選ばないですね。キャッシュが効くので問題ないと思いますが、パフォーマンス的にも無駄が多い気がしますし。

一番効率がよいのは5でしょう。最後の手段にすると思いますが。


何かの参考になれば。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ