【问题标题】:Eloquent - edit table rows and return new result data - old data retrievedEloquent - 编辑表格行并返回新结果数据 - 检索旧数据
【发布时间】: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 的结果?我应该以某种方式“刷新”查询吗?

【问题讨论】:

    标签: laravel-5 eloquent


    【解决方案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')
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 2019-08-29
      • 2015-06-25
      相关资源
      最近更新 更多