Так что, проведя день напролет, я чувствую, будто ударился о стену и хотел бы получить несколько советов. У меня есть довольно обычная таблица пользователей в моей базе данных, где у каждого пользователя есть возможность выбора 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, поэтому очень приветствуется и совершенно иной подход.
Я не знаком с 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();
Других решений пока нет …