Laravel Passport:自定义列名SQL错误

时间:2018-05-07 14:36:36

标签: laravel laravel-passport

我正在使用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();
}

但它没有解决问题。

感谢您的帮助。

1 个答案:

答案 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()并使其返回您选择的字段,则不必如此。