Как управлять многими отношениями, которые выглядят пустыми из формы? (CakePHP 3.x)

У меня есть таблицы в базе данных. Места проведения, координаторы объекта. Место проведения может иметь несколько координаторов. У меня есть форма для сохранения места проведения и его координаторов. Но места должны быть сохранены без информации координатора иногда. Однако, когда я это делаю, cakephp предупреждает меня: «Координатор не может быть пустым». Потому что да, координатором быть не может. Но если входные данные координатора пусты, я бы хотел игнорировать их на стороне таблицы / события.

Например, я попытался удалить его, используя beforeMarshal () для объекта Table. не работал

public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $options)
{
if ($data['full_name'] == '' && $data['phone_number'] == '') {
unset($data);
}
}

Я хочу делать:

Когда я заполняю форму с указанием координатора, она сохраняется правильно.
Когда я заполняю форму места без ввода координатора. Это правильно сохраняет место без координатора. Потому что координаторы не нужны.

введите описание изображения здесь

0

Решение

Тот 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']);
}

Смотрите также

0

Другие решения

Других решений пока нет …