Laravel 5.5新增is_processed字段后插入数据提示列不存在求助
针对你遇到的Laravel 5.5中插入数据提示Column not found: 1054 Unknown column 'is_processed' in 'field list'的问题,结合你已做的操作,下面是几个常见的排查方向:
检查数据库连接是否正确
确认.env文件中的DB_DATABASE、DB_HOST等配置是否指向你实际查看的数据库。有时候会不小心连到测试库或其他环境的数据库,导致你看到的表结构和代码操作的不是同一个库。可以在插入代码前临时加一行dd(DB::connection()->getDatabaseName());,输出当前连接的数据库名,和你手动查看的库做对比。确认模型的
$table属性是否正确
检查Order模型里有没有定义$table属性,如果有,确保它的值是'orders'(Laravel默认会把模型名复数化,但如果手动指定了错误的表名,比如'order',就会操作错误的表)。检查插入代码的实现方式
如果插入时没有使用Order模型,而是直接用DB门面(比如DB::table('orders')->insert(...)),要确认字段名有没有拼写错误,或者表名是否正确。另外,如果用了模型,也要检查代码里有没有硬写字段名导致拼写错误的情况。再次核对迁移文件和实际表结构
虽然你说迁移执行成功且字段已创建,但再仔细检查下:- 迁移文件里是否是
Schema::table('orders', function (Blueprint $table) { ... }),表名没有写错; - 字段定义是否是类似
$table->boolean('is_processed')->default(false);的写法,字段名拼写正确; - 直接登录数据库执行
DESCRIBE orders;,确认is_processed字段确实存在于该表中。
- 迁移文件里是否是
排查队列进程(如果用了队列)
如果插入操作是通过队列任务执行的,队列进程是常驻内存的,迁移或模型修改后需要重启队列才能加载新的配置。执行php artisan queue:restart试试。清除Laravel的查询缓存(如果启用了)
虽然Laravel 5.5默认没开查询缓存,但如果你的代码里用了->cache()方法缓存了查询,可能会导致旧的表结构被缓存。可以执行php artisan cache:clear清除所有缓存,或者针对特定查询清除缓存。
内容的提问来源于stack exchange,提问作者Saani

