set_from_cgi_update()のオーバライド用覚え書き
MagicWeaponには、data_clumpっていう、おいちゃんが勝手に「OTM(Object Tbale Mapper)」って呼称している、割合特徴的なクラスがあります。
で、この子は割と「データの塊」を扱うので。
例えば「formから情報を一式とってきてインスタンスん中にいれる」場合、set_from_cgi()っていうメソッドがあります。
厳密には set_from_cgi_insert() と set_from_cgi_update() になるのですが。set_from_cgi()の場合、insertのほうが呼ばれます。
insertの場合基本的には「全カラムがformからぶちこまれる」で、updateの場合は「pk以外の全カラムが以下略」なのですが。
勿論状況によっては「updateで、このカラムは外から受け取らない」ってのがあります。
そこで「formにそのinput要素を作らない」…だけだとクラックされるので。
もしかしたらどっかで「便利メソッド」書くかもしれませんが、現在は大体、こんな感じで書いてます。
// update用のkeyを固定する public function set_from_cgi_update($req, $empty_overwrite_flg = false) { // キーを把握、除外したいのを除外しておく $awk = array_flip($this->get_all_no_key_names()); unset($awk['除外したいキー(カラム)名']); unset($awk['除外したいキー(カラム)名']); unset($awk['除外したいキー(カラム)名']); unset($awk['除外したいキー(カラム)名']); // $awk = array_flip($awk); //var_dump($awk); // 「明示的に除外した項目」以外を対象にする return $this->set_from_cgi_detail($req, $awk, $empty_overwrite_flg); }
いや別に「固定で指定」してもよいのですが。
MagicWeaponの発想のひとつって「DBのカラムなんて、ちょいちょい追加されたりするよねぇ」に対する利便性があるのと。
その場合「このカラムだけ更新したい」ってよりは「このカラムは更新の情報受け取んな!」ってほうが状況的に多いので、こゆ書き方しています。
「このカラムだけ更新したい」なら、単純にここで「固定で配列をreturn」すりゃいいだけなんで、まぁ状況に応じての使い分け、ですな。
この辺も「今度マニュアル書く」予定ですが、とりあえず、備忘録兼ねて、めも。