Php 如何使用db:transaction-laravel更新两个表

Php 如何使用db:transaction-laravel更新两个表,php,mysql,laravel,laravel-5,Php,Mysql,Laravel,Laravel 5,这是我的视频模型代码 class Video extends Model { protected $table = 'lokit_video'; protected $fillable = [ 'title', 'cover_img', 'trailer', 'url', 'order_', 'active', 'description',

这是我的视频模型代码

    class Video extends Model
{
    protected $table = 'lokit_video';
    protected $fillable = 
    [
        'title',
        'cover_img',
        'trailer',
        'url',
        'order_',
        'active',
        'description',
        'lokit_category_id',
        'duration'
    ];
    public function lokit_category(): BelongsTo
    {
        return $this->belongsTo(Category::class);
    }

    public function video_series() 
    {
        return $this->hasMany(VideoSeries::class, 'lokit_video_id');
    } 
 }
这是我的视频系列模型代码

    class VideoSeries extends Model
{
    protected $table = 'lokit_video_series';
    protected $fillable = [
        'lokit_video_id',
        'lokit_series_id',
        'series',
        
    ];

    public function lokit_video(): BelongsTo
    {
        return $this->belongsTo(Video::class, 'lokit_video_id');
    }

    public function serie(): BelongsTo
    {
        return $this->belongsTo(Series::class, 'lokit_series_id');
    }
}
 
在我的代码控制器中

        public function update(Request $request,$id) {
        $data = $request->all();
        $validator = Validator::make($data, [
            'title'                  => 'required',
            'order_'  => 'required',
            'active'               => 'required',
            'url'               => 'required',
            'category'           => 'required'
        ]);
        $errors=$validator->errors();
        if ($validator->fails()) {
            return Redirect::to('admin/video/video/'.$id.'/edit')
                ->withErrors($errors)
                ->withInput();
        }
        $data['lokit_category_id'] = $data['category'];
        unset($data['category']);
        DB::beginTransaction();
        try {
            if($request->hasFile('cover_img')) {
                $uniquename='cvr_'.md5($id);
                $filename=$uniquename.'.'.$request->file('cover_img')->getClientOriginalExtension();
                $path=public_path('storage/media');
                $request->cover_img->move($path, $filename);
                $data['cover_img']=$filename;
                
                $this->_resizeimg($path,$filename,$uniquename);  
            }
            $isi = Video::find($id);
            if($isi->url != $data['url']) {
                $name = str_replace("_", '',$data['url']);
                $manager = new MediaManager('/uploads');
                $manager->newFolder($name);
                $data['duration'] = $this->getDuration($data['url']);
            }
            
            $isi->update($data);
            if (isset($request->series) && $request->series) {
                $video_series = new VideoSeries();
                $video_series->lokit_video_id =$id;
                $video_series->lokit_series_id = (int)$request->series;
                $video_series->series = (int)$request->episode;
                $isi->video_series()->update($video_series);
            }
            DB::commit();
            return Redirect::to('admin/video/video');
        } catch (\Exception $ex) {
            DB::rollback();
            throw $ex;
        }
   

     }
当我尝试上面的代码时,我甚至遇到了一些错误,例如传递给Illumb\Database\Eloquent\Builder::update()的参数1必须是数组类型,给定的对象,如何修复此错误以及为什么会出现错误?

您需要,因为有类似于
update()的方法
用于更新相关表的主键和外键

所以这是错误的
$isi->video_series()->update($video_series)

改用

$isi->video_series()->attach($video_series);
去掉这个

$isi->video_series()->update($video_series);
您不需要像上面那样进行更新声明,因为在创建视频系列条目时,您已经在lokit_video_id中添加了视频的id。(
$video\u series->lokit\u video\u id=$id;

但您需要保存该模型实例。这样做吧

$video_series->save();

我尝试了您的代码,但出现了一个错误,如调用undefined方法illumb\Database\Eloquent\Relations\HasMany::attach(),您似乎还没有配置(HasMany)
Video
VideoSeries
模型之间的关系请在帖子中分享模型和模式,并解释你想做什么。我已经分享了我的模型代码。我想再给你一个建议。就我所知,video_系列是一个透视表,所以为什么不在video和系列之间建立多对多关系呢。这样,您就不必创建视频系列模型,视频和系列模型将直接链接。让我知道你对这件事的看法。