如何使用 laravel 中的附加字段更新我的数据透视表 Table

How to update my Pivot Table with addition field in laravel

我的 table 与 eloquent 的关系 laravel 5.3

     User
         --id
         --name
     Gallery
        --id
        --name
     Video
         --id
         --name
      Tags       *pivot table
         --id
         --gallery_id
         --video_id
         --user_id
         --created_at
         --deleted_at

图库模型:

public function videos()
{
    return $this->belongsToMany(Video::class,'tags','gallery_id','video_id')->withPivot('user_id')->withTimestamps();
}

视频模型

public function galleries()
{
    return $this->belongsToMany(Gallery::class,'tags','video_id','gallery_id') ->withPivot('user_id')->withTimestamps();
}

我的控制器

public function store(Request $request)
{
    $data['name]=$request->name;
    $video=Video::create($request->name);
    $video->galleries()->attach($request->gallery_id,['user_id' => Auth::id()]);
    return redirect('/video');
}

它的工作已经完成, 但是当更新面临错误时(非法偏移类型) 控制器更新功能

public function update(Request $request, Video $video)
{
  $data['name]=$request->name;
  $video->update($data);
  $video->galleries()->sync([$request->gallery_id=>['user_id'=>Auth::user()->id]]);
  return redirect('/video');
}

谁能帮我解决问题

$video->update() 正在寻找一个数组,其中 $request->name 可能是一个字符串。请尝试以下操作。

public function update(Request $request, Video $video)
{
  $video->update(['name' => $request->name]);
  $gallery_id = $request->gallery_id;
  $video->galleries()->sync([$gallery_id => ['user_id'=>Auth::user()->id]]);
  return redirect('/video');
}

您还混淆了 Auth::id() 和 Auth::user()->id 的用法。这有什么原因吗?

编辑:

根据评论,您似乎在尝试使用数组作为数组中的索引。如果您总是处理一个数组,则必须将代码更改为如下所示,这将以正确的格式构建数组。

public function update(Request $request, Video $video)
    {
      $video->update(['name' => $request->name]);
      $sync_array = [];
      foreach($request->gallery_id as $gallery_id)
         $sync_array[$gallery_id] = ['user_id' => Auth::user()->id];

      $video->galleries()->sync($sync_array);
      return redirect('/video');
    }

如果您有时有一个字符串,有时有一个数组,则必须在代码中添加一个条件来检查它并相应地编辑您的代码。