我使用CakePHP2.7.5并且我的模型save
函数失败,因为它正在尝试验证$fieldList
参数中未指定的字段。
根据Cookbook,save
方法将$fieldList
作为第三个参数,将保存的字段限制为$fieldList
中列出的字段。
Model::save(array $data = null, boolean $validate = true, array $fieldList = array())
我在模型中调用save
,如下所示:
$this->save($data, true, ['name', 'place']);
$ data是这样的:
[ 'ModelName' => [ 'id' => $id, 'name' => 'abcdef', 'place' => 'ghijklmn' ] ]
但它失败了,因为$data
中未显示的必填字段出现验证错误。它应该以这种方式工作吗?
我是否必须在$data
中为必填字段添加一些虚拟数据?
答案 0 :(得分:0)
您可能需要在验证规则中将 required 设置为false:
public $validate = array(
'description' => array(
'alphaNumeric' => array(
'rule' => 'alphaNumeric',
'required' => false,
'message' => 'You have to enter a valid description'
)
);
}
答案 1 :(得分:0)
我自己找到了答案。在Cake的Model::save
函数中,第二个参数$validate
可能是一个数组,只有当它是一个数组时才会出现此问题。 (所以,我在上面问题中的例子并不准确。)
所以,这个应该按预期工作(仅验证和保存'name'和'place'),
$this->save($data, true, ['name', 'place']);
但是这个没有,
$this->save($data, ['validate' => true], ['name', 'place']);
实际上我是这样做的。 (因为我不得不把'原子'弄错,这就是怎么做的。)
$this->save($data, ['validate' => true, 'atomic' => false], ['name', 'place']);
就我而言,这是解决方案。
$this->save($data, ['validate' => true, 'atomic' => false, 'fieldList' => ['name', 'place']);