【问题标题】:Laravel: How to update pivot tables withou using firstLaravel:如何在不首先使用的情况下更新数据透视表
【发布时间】:2018-06-27 14:44:43
【问题描述】:

我是 Laravel 的新手。我想更新我的叶子数据透视表。我正在尝试使用下面的代码,但它只更新我在 db 中具有相同 leave_id 的多行的单行,我想更新所有这些 where leave_id = xyz

我的模型 Leave 中有以下功能:

public function relLeave(){

    return $this->belongsToMany(User::class)->withPivot('days');

}

离开控制器:

public function saveUpdate(Request $request)
{
  $leave = Leave::find($request->id);
  $msg = $leave->relLeave()->Where('leave_id', $request->id)->get()->first();
 $msg->pivot->days = $request->days;
 $msg->pivot->save();
}

【问题讨论】:

  • 它只会在你运行时更新第一个 ->get()->first(); 尝试将其更改为 ->get(); 然后 dd($msg) 以确保它正确获取。如果它确实运行一个简单的 foreach 循环..
  • 谢谢哥们。它的工作
  • 不客气。

标签: laravel laravel-5 pivot pivot-table


【解决方案1】:

我遵循@option 的指示,它对我有用,我删除了 first();

下面是我更新的代码。

     $msg = $leave->relLeave()->Where('leave_id', $request->id)->get();
        foreach($msg as $msgs)
        {
            $msgs->pivot->days = $request->days;
            $msgs->pivot->save();
        }

【讨论】:

    【解决方案2】:

    您可以在更新关系时更新数据透视表中的额外字段

    $leave->relLeave()->sync([$request['id'] => ['days' => $request['days']]]);
    

    【讨论】:

      【解决方案3】:

      如果可以的话,您可以使用查询生成器:

      DB::table('leave_user')->where('leave_id', $request->id)->update(['days' => $request->days]);
      

      这只是一个数据库查询,而且非常简单。

      如果您想要 Eloquent 解决方案,请在循环中使用 updateExistingPivot()

      $leave = Leave::find($request->id);
      $usersIds = $leave->relLeave()->pluck('id')->toArray();
      foreach ($usersIds as $userId) {
           $leave->relLeave()->updateExistingPivot($userId, ['days' => $request->days]);
      }
      

      【讨论】:

        猜你喜欢
        • 2013-03-15
        • 1970-01-01
        • 1970-01-01
        • 2018-02-26
        • 1970-01-01
        • 2017-11-15
        • 2016-02-06
        • 1970-01-01
        • 2021-10-03
        相关资源
        最近更新 更多