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\HasManysaveMany方法返回\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 返回行并填充表格,但表格单元格标签消失

为啥 eloquent orm 上的查询语句结果返回空值

Laravel Eloquent groupBy() 并且还返回每个组的计数

Python在文件中查找字符串,编辑行并保存到新文件

使用 Where 和 Eloquent 获取数据库结果

判断Laravel Eloquent获取数据结果集是否为空