gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

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」すりゃいいだけなんで、まぁ状況に応じての使い分け、ですな。


この辺も「今度マニュアル書く」予定ですが、とりあえず、備忘録兼ねて、めも。