Привязка модели формы Laravel с двойной ошибкой отношения один к одному

Так что, проведя день напролет, я чувствую, будто ударился о стену и хотел бы получить несколько советов. У меня есть довольно обычная таблица пользователей в моей базе данных, где у каждого пользователя есть возможность выбора 2 адресов (один для выставления счетов и один для получения). В моей форме это выглядит довольно прилично с привязкой модели формы, где я могу использовать код Blade, как показано ниже, для генерации правильных полей:

{{ Form::text('billing[city]') }}
{{ Form::text('receiving[city]') }}

Аналогичным образом я могу увидеть результаты в контроллере с помощью:

$billing = $user->billing;
$billing->city = Input::get('billing.city');

$receiving = $user->receiving;
$receiving->city = Input::get('receiving.city');

Теперь у меня возникает проблема, если я сохраню все 3 модели отдельно, как в $user->save();, $billing->save(); а также $receiving->save();У меня будет 3 отдельные группы ошибок. Обычно это было бы хорошо, так как я мог бы просто объединить их в один большой MessageBag, но в этом случае любая ошибка, допущенная в любом из адресов, не будет отображаться в списке, если это было с адреса выставления счета или с адреса получения. Вместо моей ошибки будет просто ключ city вместо billing.city как я бы предпочел, чтобы это было.

Класс MessageBag, похоже, не поддерживает метод для префикса всего содержимого или чего-то подобного, и мне не кажется разумным просто добавить метод внутри уже существующего класса, так как это сломало бы мои ошибки, если мы решим обновить Laravel в будущем.

Буду признателен за любые указатели или помощь, я в основном использую этот проект для ознакомления с Laravel, поэтому очень приветствуется и совершенно иной подход.

1

Решение

Я не знаком с Ardent, но, возможно, связывание адресов и использование push, который должен сохранить все, вернет вам один MessageBag со всеми вещами.

// Create User
$user = new User;
$user->name = Input::get('name');
$user->email = Input::get('email');

// Create addresses
$billing = $user->billing;
$billing->city = Input::get('billing.city');

$receiving = $user->receiving;
$receiving->city = Input::get('receiving.city');

$user->address()->associate($billing);
$user->address()->associate($receiving);
$user->push();
0

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

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

По вопросам рекламы [email protected]