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 成为你选择的字段。
我正在使用 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 成为你选择的字段。