新しいレコードを挿入するために CakePHP (2.3.4) Model::save メソッドを調査していたところ、ちょっとした障害に遭遇しました。
//Two fields provided, email field intended to fail validation
$data = array('Member' => array(
'username' => 'hello',
'email' => 'world'
));
$this->Member->create();
var_dump($this->Member->save($data, true));
上記の save() は false を返し、データはデータベースに書き込まれません。ただし、データを次のように変更すると:
//One field provided, intended to pass validation
$data = array('Member' => array(
'username' => 'hello'
));
次に、save() は、空白の電子メール フィールドを使用してデータベースに新しいレコードを書き込もうとします。指定されていないフィールドの検証をスキップすることは、更新中に役立つ動作になる可能性があることを理解していますが、新しいレコードを作成するときに部分的に空のデータセットを処理するための CakePHP の推奨される方法はありますか? どうもありがとう。
編集: ヒントを提供してくれた Sam Delaney に感謝します。他の誰かが困惑した場合に備えて、これはトリックを行いました: CakePHP Data Validation: field 'required' key
このキーは、ブール値、作成または更新のいずれかを受け入れます。このキーを true に設定すると、フィールドは常に必須になります。create または update に設定すると、フィールドは update または create 操作にのみ必要になります。'required' が true と評価された場合、フィールドはデータ配列に存在する必要があります。たとえば、検証ルールが次のように定義されているとします。
required => true
私はもともとモデルを焼き付けていましたが、それが検証ルールから除外されていたことを忘れていました。true
またはに設定すると、意味'create'
不明なデータ配列が原因で空白のレコードが挿入されるのを回避できます。