У меня есть таблицы в базе данных. Места проведения, координаторы объекта. Место проведения может иметь несколько координаторов. У меня есть форма для сохранения места проведения и его координаторов. Но места должны быть сохранены без информации координатора иногда. Однако, когда я это делаю, cakephp предупреждает меня: «Координатор не может быть пустым». Потому что да, координатором быть не может. Но если входные данные координатора пусты, я бы хотел игнорировать их на стороне таблицы / события.
Например, я попытался удалить его, используя beforeMarshal () для объекта Table. не работал
public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $options)
{
if ($data['full_name'] == '' && $data['phone_number'] == '') {
unset($data);
}
}
Я хочу делать:
Когда я заполняю форму с указанием координатора, она сохраняется правильно.
Когда я заполняю форму места без ввода координатора. Это правильно сохраняет место без координатора. Потому что координаторы не нужны.
Тот unset()
вызов не повлияет на данные вообще, это не то, как работает PHP, все, что он делает, это сбрасывает переменную в локальной области видимости beforeMarshal()
метод.
Вы должны сбросить фактическое свойство / ключ ассоциации из родительской таблицы, то есть в VenuesTable::beforeMarshal()
, Что-то вроде:
if (isset($data['venue_coordinators']) &&
is_array($data['venue_coordinators']) &&
count($data['venue_coordinators']) === 1 &&
(!isset($data['venue_coordinators'][0]['full_name']) ||
$data['venue_coordinators'][0]['full_name'] === '') &&
(!isset($data['venue_coordinators'][0]['phone_number']) ||
$data['venue_coordinators'][0]['phone_number'] === '')
) {
unset($data['venue_coordinators']);
}
Смотрите также
Других решений пока нет …