Я использую CakePHP2.7.5 и мою модель save
функция не работает, потому что она пытается проверить поля, которые не указаны в $fieldList
параметр.
Согласно Поваренная книга, 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
для обязательных полей?
Вам, вероятно, нужно установить требуется false в правиле проверки:
public $validate = array(
'description' => array(
'alphaNumeric' => array(
'rule' => 'alphaNumeric',
'required' => false,
'message' => 'You have to enter a valid description'
)
);
}
Я нашел ответ сам. В торт Model::save
функция, второй параметр $validate
может быть массивом, и эта проблема возникает только тогда, когда это массив. (так, мой пример в вопросе выше не был точным.)
Таким образом, этот должен работать как задумано (проверяет и сохраняет только «имя» и «место»),
$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']);