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

字段存在却无法保存:category表缺失project_id字段报错排查

排查方案

哇,这个问题挺典型的——明明你代码里操作的是Work模型,结果SQL却往category表里插数据,这明显是模型的表名映射出问题了!我给你梳理几个排查方向,按顺序来大概率能解决:

  • 第一步:检查Work模型的表名配置
    Laravel默认会把模型类名转为复数形式作为表名(比如Work对应works),但如果你手动指定了$table属性,很可能写错了。打开你的Work.php模型文件,看看有没有类似下面的错误:

    // 错误示例:不小心把表名写成了category
    protected $table = 'category';
    

    正确的配置应该是:

    protected $table = 'work'; // 因为你的迁移文件里创建的是单数表名work
    
  • 第二步:确认Work模型的fillable字段(次要但必要)
    虽然当前报错是表不对,但即使表映射正确,如果fillable没包含需要的字段,后续还是会保存失败。确保你的Work模型里有:

    protected $fillable = ['project_id', 'content', 'user_id', 'work_time', 'input_person', 'input_date'];
    

    这样fill($request->all())才能正确完成批量赋值。

  • 第三步:核对控制器代码的笔误
    再仔细检查store方法的代码,有没有不小心把Work写成了Category?比如:

    // 错误示例:手滑实例化了错误的模型
    $work = new Category; 
    

    虽然你贴的代码里是new Work,但实际项目里可能存在手误,再确认一遍。

  • 第四步:清除Laravel缓存
    有时候框架的缓存(模型缓存、配置缓存)会导致奇怪的映射问题,运行以下命令清空缓存:

    php artisan cache:clear
    php artisan config:clear
    php artisan route:clear
    
  • 第五步:验证数据库表结构
    虽然你贴了迁移文件代码,但实际数据库里的work表是不是真的存在project_id字段?可以用数据库客户端直接查看表结构,或者运行SQL命令验证:

    DESCRIBE work;
    

    确认字段存在且类型和迁移文件一致。

按这个顺序排查,基本就能定位问题——大概率是Work模型的$table属性配置错误,导致模型错误关联到了category表。

内容的提问来源于stack exchange,提问作者0xsu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:21:17