2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

phalcon php save()の動き

Posted at

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させないほうがもっと高速な印象ありますが、いまのところ私の中でのベスト回答なのかなと。

もっとこうしたほうがいいよとか、ご意見合ったら伺いたいです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?