現象
以下のようにしてDB へのデータ格納を Model->save() で行ったところ、
if (!$model->save()) {
// 失敗
}
// 成功
戻り値的には成功となったにもかかわらず、DB を覗いてみるとデータが入っていない、という現象に出くわしたので、その原因と対応方法。
原因
Phalcon のデフォルト動作では Model のフィールドが null でないかを自動的にバリデーションする機構が有効になっているようです。
このため、 Model の全てのフィールドに null 以外の何らかの値が入っていないと、このバリデーションに引っかかってしまいます。
このとき、戻り値は false になってほしいところですが、 true が返ってくるようです。
Phalcon 的には Validation Failed Events で対応するのが流儀なのでしょうか。。
これでは、更新する値が null でかまわなかったりする場合に困ります。
対応方法
以下のような設定をしておくことで、Model のフィールドが null でないかを自動的にバリデーションする機構を無効にできます。
simple 型のプロジェクトならservices.php
あたりに書くのがよいのではないかと思います。
\Phalcon\Mvc\Model::setup([
'notNullValidations' => false
]);