CodeIgniter 4出现Unknown column 'token' in 'field list'报错求解决
解决登出时Token黑名单插入报错的问题
1. 检查模型的批量赋值规则
如果使用Laravel这类框架,模型默认通过$fillable(允许批量赋值的字段)或$guarded(禁止批量赋值的字段)限制字段操作。若token未加入$fillable列表,框架会自动过滤该字段,导致SQL语句中缺失token列触发报错。需在UserModel中配置:
// 将token加入允许批量赋值的字段列表 protected $fillable = ['token', /* 其他允许的字段 */]; // 或者设置$guarded为空数组,允许所有字段赋值 protected $guarded = [];
2. 确认模型绑定的表是否正确
检查UserModel的$table属性,确保指向的是你的Token黑名单表,而非用户表或其他无关表:
// 替换为你的黑名单表名 protected $table = 'token_blacklist';
3. 排查数据库字段大小写问题
Linux环境下的MySQL默认区分表名/字段名大小写。核对数据库中字段名是token还是Token,代码中的字段名需与数据库完全一致,大小写不匹配会导致字段无法识别。
4. 检查插入语句的字段拼写
查看addBlacklist方法中的插入逻辑,确保字段名拼写正确:
// 错误示例:字段拼写错误 DB::table('token_blacklist')->insert(['tokn' => $token]); // 正确示例 DB::table('token_blacklist')->insert(['token' => $token]);
若使用模型create方法,需保证传入数组的键名是token,与数据库字段严格匹配。
5. 清除框架缓存
部分框架会缓存表结构,若token字段是新增的,旧缓存可能导致字段识别失败。执行框架缓存清除命令,以Laravel为例:
php artisan config:clear php artisan cache:clear
内容的提问来源于stack exchange,提问作者Rafly Andrian
相关产品推荐
相关产品推荐

