Eloquent - 编辑表格行并返回新结果数据 - 检索旧数据
Posted
技术标签:
【中文标题】Eloquent - 编辑表格行并返回新结果数据 - 检索旧数据【英文标题】:Eloquent - edit table rows and return new result data - old data retrieved 【发布时间】:2018-11-20 23:16:31 【问题描述】:我有一个表单,用户可以在其中编辑、创建或删除运输方式。 用户发送表单并更新数据。
我想在编辑后返回用户的送货方式。 但我似乎取回了旧数据,而不是更新后的数据。
$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
的结果?我应该以某种方式“刷新”查询吗?
【问题讨论】:
【参考方案1】:\Illuminate\Database\Eloquent\Relations\HasMany
的saveMany
方法返回\Illuminate\Database\Eloquent\Collection
的实例,必须手动设置关系
$shipping_methods = $user->shipping_methods()->saveMany($methods);
$user->setRelation('shipping_methods', $shipping_methods);
return response()->json($user->shipping_methods->toArray());
【讨论】:
【参考方案2】:你必须重新加载关系:
return response()->json($user->load('shipping_methods')->shipping_methods->toArray());
你也可以简化整行:
return $user->load('shipping_methods')->shipping_methods;
【讨论】:
太好了,谢谢我得到了运输方法,但是之前的代码中有一些急切加载的东西没有包含在这个“加载”方法中,但我可以将它添加到加载中方法,例如:return response()->json($designer ->load('shipping_methods','shipping_methods.zone.countries','shipping_methods.supplier')以上是关于Eloquent - 编辑表格行并返回新结果数据 - 检索旧数据的主要内容,如果未能解决你的问题,请参考以下文章
NSFetchedResultsController 返回行并填充表格,但表格单元格标签消失