Eloquent - редактировать строки таблицы и возвращать новые данные результатов - старые данные получены - PullRequest
0 голосов
/ 11 июня 2018

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

Я хочу вернуть методы доставки пользователя после их редактирования.Но я, кажется, получаю старые данные вместо обновленных данных.

$user = \App\User::where('user_id', $user->id)->first();

$user->shipping_methods->each(function($method) {
    $method->delete();
});
$methods = [];
foreach ($request->input('methods') as $method) {
    $methods[] = new \App\ShippingMethod($method);
}

$user->shipping_methods()->saveMany($methods);

return response()->json($user->shipping_methods->toArray());

(на данный момент код просто удаляет старые методы доставки и заменяет их новыми).Я использую красноречивые отношения для получения методов доставки.

Так что, когда я делаю:

return response()->json($user->shipping_methods->toArray());

, почему я не получаю новые результаты, вместо этого я получаю результаты доОбновить?Использует ли он результаты первого $user->shipping_methods в строке 3?Должен ли я как-то «обновить» запрос?

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Метод saveMany для \Illuminate\Database\Eloquent\Relations\HasMany возвращает значение \Illuminate\Database\Eloquent\Collection, и вы должны вручную установить отношения

$shipping_methods = $user->shipping_methods()->saveMany($methods);
$user->setRelation('shipping_methods', $shipping_methods);

return response()->json($user->shipping_methods->toArray());
0 голосов
/ 11 июня 2018

Вы должны перезагрузить отношение:

return response()->json($user->load('shipping_methods')->shipping_methods->toArray());

Вы также можете упростить всю строку:

return $user->load('shipping_methods')->shipping_methods;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...