Я использую лаварель с пылким пакетом.
У меня есть проблема, когда я хочу обновить строку.
У меня есть 2 модели клиента и адреса, связанные отношением морфона.
Это отношение работает хорошо, когда я хочу, чтобы клиент возвращал ожидаемый результат этой строки:
Client::with('address')->find($id);
Но я не могу понять, как обновить клиент чистым решением. Кто-нибудь может ответить на эти вопросы:
- Как с помощью Ardent вы могли бы автогидратировать модель, связанную с ней?
- Когда вы обновляете некоторые данные, какова наилучшая практика в lavarel? Использовать метод обновления? Использовать сохранение? Использовать толчок? Заполнить всю модель? Использовать автоувлажнение?
Когда я регистрирую Input::all() в моем методе обновления, я получаю следующее:
[2014-05-31 15:52:56] production.INFO: {"id":983,"firstName":"Susanne","lastName":"Adam","birthDate":"18\/06\/1982","inscriptionDate":"08\/09\/2013","status":3,"created_at":"2014-05-31 14:26:25","updated_at":"2014-05-31 14:26:25","email":"[email protected]","address":{"id":983,"address":"avenue Etienne","address2":"","ville":"Cordierboeuf","cp":"25 10","phone":"0403983157","mobile":"+33 (0)3 0","addressable_id":983,"addressable_type":"Client","created_at":"2014-05-31 14:27:58","updated_at":"2014-05-31 14:27:58"}} [] []
Как видите, адресные данные находятся внутри клиентских данных.
3. Когда я использую обновление, сохранение или нажатие (метод красноречивого), красноречивый не понимает, что он должен обновить модель адреса, а затем обновить связанную модель клиента. Формат моих данных неправильно сформирован?
Спасибо.
ОБНОВЛЕНИЕ:
Когда я делаю Log::info(Input::all()), я получаю следующие данные json в своем контроллере:
[2014-06-01 18:10:46] production.INFO: {"id":284,"firstName":"Andr\u00e9e","lastName":"Adam","birthDate":"23\/07\/1944","inscriptionDate":"22\/11\/2013","status":2,"created_at":"2014-06-01 15:41:22","updated_at":"2014-06-01 18:06:44","email":"[email protected]","address":{"id":284,"streetAddress":"93, avenue Lefort","streetAddress2":"","city":"Boulay-sur-Leger","zipCode":"14054","phone":"09 51 03 1","mobile":"+33 6 00 6","addressable_id":284,"addressable_type":"Client","created_at":"2014-06-01 15:42:50","updated_at":"2014-06-01 18:06:44"}} [] []
С автогидратацией ardent это не работает... Автогидратация клиента прошла успешно, а Address нет, возможно, из-за полиморфной связи (один-к-одному) между ними.
Я пытаюсь заполнить свои модели следующим образом:
$client = Client::with('address')->find($id);
$client->update(Input::except('address'));
$client->address->update(Input::only('address'));
но это не работает, потому что Input::only('address') дает неправильно сформированные данные, когда я регистрирую это, я получаю следующее:
Log::info(Input::except('address'));
Log::info(Input::only('address'));
//output
[2014-06-01 18:20:34] production.INFO: {"id":284,"firstName":"Andr\u00e9e","lastName":"Adam","birthDate":"23\/07\/1944","inscriptionDate":"22\/11\/2013","status":2,"created_at":"2014-06-01 15:41:22","updated_at":"2014-06-01 18:10:46","email":"[email protected]"} [] []
[2014-06-01 18:20:34] production.INFO: {"address":{"id":284,"streetAddress":"93, avenue Lefort","streetAddress2":"","city":"Boulay-sur-Leger","zipCode":"14054","phone":"09 51 03 1","mobile":"+33 6 00 6","addressable_id":284,"addressable_type":"Client","created_at":"2014-06-01 15:42:50","updated_at":"2014-06-01 18:06:44"}} [] []
Итак, я смешиваю два метода:
$inputs = Input::except('_method');
$client = Client::with('address')->find($id);
$client->update(Input::except('address'));
$client->address->update($inputs['address']);
Это работает довольно хорошо!
Но я не могу понять, почему у ardent не работает автогидратация...
Спасибо.