我正在使用Laravel的Passport进行API,每当我向我的某个资源发送请求时,都会收到此错误:
{
"message": "SQLSTATE[42S22]: Column not found: 1054 Unknown column 'id' in 'where clause' (SQL: select * from `users` where `id` = 1 limit 1)",
"exception": "Illuminate\\Database\\QueryException",
...
}
我们可以看到它找不到id
列,因为我将其重命名为USER_ID
。
我见过this answer,但我不知道如何在我的情况下使用它。
我在我的User.php
模型中试过这个:
public function findForPassport($username) {
return $this->where('USER_ID', $username)->first();
}
但它没有解决问题。
感谢您的帮助。
答案 0 :(得分:1)
Derek的评论是正确的,只需设置protected $primaryKey = 'user_id'
即可。如果你对它的细节感兴趣,请继续阅读:
这个问题实际上并不是针对Passport的,它更多地与Auth Guard行为有关,后者是从Passport中抽象出来的。
Laravel开箱即用的App\User
模型扩展了Illuminate\Foundation\Auth\User
,它使用Illuminate\Auth\Authenticatable
特征。这个特性只是为了满足Illuminate\Contracts\Auth\Authenticatable
接口条件的一种便利,其中一个基本上就是你的用户名和密码字段都有一个getter。
此特征默认用户名字段与表格主键相同。但是,如果您要覆盖自己的Model类中的getAuthIdentifierName()
并使其返回您选择的字段,则不必如此。