Laravel 护照:自定义列名称 SQL 错误

Laravel Passport: Custom column name SQL error

我正在使用 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

我看过 ,但我不知道如何在我的案例中使用它。

我在我的 User.php 模型中试过这个:

public function findForPassport($username) {
    return $this->where('USER_ID', $username)->first();
}

但这并没有解决问题。

感谢您的帮助。

Derek 的评论是正确的,只需设置protected $primaryKey = 'user_id'。如果您对它的具体细节感兴趣,请继续阅读:

这个问题实际上并不是 Passport 特有的,它更多地与从 Passport 抽象出来的 Auth Guard 行为有关。

Laravel 的开箱即用 App\User 模型扩展 Illuminate\Foundation\Auth\User,它使用 Illuminate\Auth\Authenticatable 特性。该特性只是为了满足 Illuminate\Contracts\Auth\Authenticatable 接口的条件而提供的便利,其中之一是基本上有一个 getter 用于无论您的用户名和密码字段是什么。

此特征默认用户名字段与该表的主键相同。但它不一定是,如果你要覆盖你自己的模型 class 中的 getAuthIdentifierName() 并使其 return 成为你选择的字段。