Eloquent - 编辑表行并返回新结果数据 - 检索旧数据

时间:2018-06-11 16:27:05

标签: laravel-5 eloquent

我有一个表单,用户可以在其中编辑,创建或删除送货方式。 用户发送表单并更新数据。

我希望在用户编辑后返回用户的送货方式。 但我似乎得到了旧数据,而不是更新的数据。

$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());

为什么我不能获得新的结果,而是在更新之前获得结果?它是否使用了第3行的第一个$user->shipping_methods的结果?我应该刷新"以某种方式查询?

2 个答案:

答案 0 :(得分:1)

你必须重新加载这段关系:

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

您还可以简化整行:

return $user->load('shipping_methods')->shipping_methods;

答案 1 :(得分:0)

saveMany的{​​{1}}方法返回\Illuminate\Database\Eloquent\Relations\HasMany的实例,您必须手动设置关系

\Illuminate\Database\Eloquent\Collection