字段存在却无法保存: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
相关产品推荐
相关产品推荐

