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

Laravel新手遇Auth::check()报错:SQLSTATE[42S22]列'id'不存在

解决Laravel Auth::check() 找不到'id'列的问题

嘿,我之前刚碰到过一模一样的问题,咱们一步步捋清楚怎么解决它!

问题根源很明确:Laravel的Auth组件默认会假定用户表的主键是id,虽然你已经在User模型里指定了protected $primaryKey = 'user_id';,但可能还有一些细节没处理到位,导致Auth系统依然在按默认逻辑查找id列。

下面是几个亲测有效的解决步骤:

1. 完善User模型的主键配置

你的模型已经设置了$primaryKey,但如果你的user_id是非自增的字符串类型(比如UUID、自定义字符串ID),还需要额外添加两行配置来告诉Laravel主键的类型:

protected $table = 'tbl_user';
public $timestamps = false;
protected $fillable = [ 'user_id','name', 'email', 'password', ];
protected $primaryKey = 'user_id';
// 如果user_id不是自增整数,必须加上这两行
public $incrementing = false;
protected $keyType = 'string';
protected $hidden = [ 'password', 'remember_token', ];

如果你的user_id是自增整数,那只需要确保$primaryKey的设置正确即可。

2. 清除Laravel的缓存

有时候Laravel会缓存旧的模型或配置信息,导致新的主键设置无法生效。运行下面的命令清空所有缓存:

php artisan config:clear
php artisan cache:clear
php artisan route:clear

3. 确认登录逻辑的正确性

如果你是手动写的登录验证逻辑,要确保登录时使用的是user_id而非默认的id。比如:

// 正确的写法:用user_id登录
Auth::loginUsingId($user->user_id);
// 或者直接传入用户实例(推荐)
Auth::login($user);

如果用的是Laravel自带的登录控制器,只要模型配置正确,它会自动适配你设置的主键,不用额外修改。

4. 检查Auth配置文件

打开config/auth.php,确认providers下的users配置指向的是你的User模型,且没有硬编码id作为主键:

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Models\User::class, // 确保这里是你的User模型正确路径
    ],
],

按照上面的步骤操作完,应该就能彻底解决这个找不到id列的报错了!

内容的提问来源于stack exchange,提问作者Trọng Koy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:35:51