phalcon php 3.0.3
phalcon のsave()時のvalidation(検証)動作について
Users モデルのdeleted フラグに1(TRUE)をセットしたいというだけなので、SQL的にいうと
UPDATE Users SET deleted = 1 WHERE user_id = :user_id:
ってやりたいだけなので、
$user = new Users();
$user->user_id = 12345;
$user->deleted = 1;
$user->save();
とすると、email is requireみたいなエラーが沢山でてきます。
テーブル(モデル)構造にuser_id以外の項目に対して、not nullが付いている場合の動作です。not null がついていると勝手に入力チェックしているようです。
validationしてくれているってことですね。
たとえば、
$whiteList = ["deleted"];
$user->save(null, $whiteList);
としても結果は同じ。
このwhiteList(ホワイトリスト)は、実際にUPDATE文が実行されるときに他のフィールドはセットしないというだけであって、validationしないというものではありません。ちゃんとホワイトリストと関係なくvalidationします。
つまり、
モデル全体のvalidate
↓
saveのwhiteList参照しUPDATE/INSERT実行
ということ。
じゃ、validationしないでほしい、とおもって
modelに
skipAttribute=array();
を指定するとしなくなるのですが、これは全てにおいてValidationしなくなります。
ということで、このvalidationのことを考えて
$user = new Users();
$user->findFirst(1);
$user->deleted = 1;
$whiteList = ["deleted"];
$user->save(null,$whiteList);
これがベストなのかなと。
いったん1レコードすべて取得しておく。そうすることでvalidateを通過させる。
関係ないところはvalidateさせないほうがもっと高速な印象ありますが、いまのところ私の中でのベスト回答なのかなと。
もっとこうしたほうがいいよとか、ご意見合ったら伺いたいです。