You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8 Eloquent执行create操作生成SQL查询缺失字段问题

问题根因

该报错由Laravel Eloquent的批量赋值过滤机制触发:

  • create()属于批量赋值操作,所有传入的字段必须提前在模型的$fillable白名单中声明,未声明的字段会被自动过滤,不会写入生成的SQL语句中。
  • 你另外两个可正常运行的Pivot模型必然已经配置了对应字段的$fillable属性,可以直接对比校验。

修复方案

打开MovieGenre Pivot模型文件,添加$fillable属性声明允许批量赋值的字段即可:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Relations\Pivot;

class MovieGenre extends Pivot
{
    // 新增以下代码
    protected $fillable = [
        'movie_id',
        'genre_id',
    ];
}

可选优化

你当前先删除旧关联、再循环创建新关联的逻辑,可以直接用Laravel多对多关联自带的sync()方法简化,无需手动操作中间表模型:

// 前提是Movie模型中已经定义了genres的belongsToMany关联
$movie = Movie::findOrFail($id);
$movie->genres()->sync($request->input('genres', []));

sync()方法会自动完成旧关联删除、新关联创建的全流程,也天然规避了中间表模型的批量赋值问题。

内容的提问来源于stack exchange,提问作者Jakub Krakowiak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:24:05