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
相关产品推荐
相关产品推荐

