2012年11月23日金曜日

PHP連想配列の先頭にアイテムを追加

連想配列の先頭にアイテムを追加したい。

$ary = array('001' => 'item1', '002' => 'item2', '003' => 'item3');

array_reverse($ary);
$ary['addkey'] = 'addvalue';
array_reverse($ary);

ひっくり返した配列にアイテムを追加してまたひっくり返す。

セレクトボックスのソース使用している連想配列の先頭にアイテムを追加したいときなど。

2012年11月18日日曜日

CakePHP2で一覧形式のデータを保存する

こんな感じです。

foreach($data as $rec) {
  $this->Model->create();
  $this->Model->id = $rec['id'];
  $this->Model->save($rec, false);
}

ループの数だけSQLを発行するのですね。
フレームワークの魔法はなかったのです。

create()を忘れずに!

2012年11月8日木曜日

cakePHP2 「設定より規約」

CakePHP2です。

「設定より規約」

"convention over configuration"

なるほど、わかります。
これにピッタリハマる案件は幸せです。保守も楽チン???

さて、既存システムのリプレース、やり方はいろいろとあると思います。

予算などなどいろいろな制約の都合上、既存システムからの移行でDBはそのままでいくぜ。
ということもあると思います。結構あると思います。

こんなとき、この「規約」がフレームワークを使用する上でのメリットと、まさにトレードオフになったりならなかったり。

親子関係を持つレコードセットを取得するとき、規約に則っていれば、

find('threaded',…)

などで簡単に取得できます。(これスゴイ!)
がしかし、既存DBレイアウトのままのときはそうもいきません。

join して、find('all', …) で取得したレコードセットを親子関係になるように整形する必要があります。
 ここのコストが結構なものだったりします。
どうせビューでforeachするからそこでやっちゃえよ。というのもわかります。
でもモデルで親子関係の配列を返してやればメンテナンスも楽チンなのです。

実装するとき、SQLがスッと頭に浮かぶのだけれども、せっかくのフレームワーク、ここは「規約」にのっとって、fields/conditions/join/order などを find()メソッドに渡すように書こうとすると結構時間がかかります。(慣れですかね。)

求めるSQL文は頭にあって、それを生成するような、「規約」にのっとった書き方をするのは、ううむ、と思うこともあります。
生成されるのは、結局SQL文です。なので素のSQLをイメージできなきゃ、「規約」も絵に書いた餅ということですね。