Laravel Passport: ошибка имени пользовательского столбца SQL - PullRequest
0 голосов
/ 07 мая 2018

Я делаю API, используя Паспорт Laravel, и всякий раз, когда я отправляю запрос на один из моих ресурсов, я получаю эту ошибку:

{
    "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();
}

Но это не решило проблему.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 07 мая 2018

Комментарий Дерека верен, просто установите protected $primaryKey = 'user_id'. Если вам интересны гайки и болты, читайте дальше:

Эта проблема на самом деле не относится к паспорту, она больше связана с поведением Auth Guard, которое абстрагировано от Passport.

Стандартная модель Laravel App\User Модель расширяет Illuminate\Foundation\Auth\User, которая использует черту Illuminate\Auth\Authenticatable. Эта особенность является просто удобством для удовлетворения условий интерфейса Illuminate\Contracts\Auth\Authenticatable, одним из которых является наличие в основном геттера для любых полей имени пользователя и пароля.

Эта черта по умолчанию поле имени пользователя совпадает с первичным ключом таблицы. Но это не обязательно, если вы переопределяете getAuthIdentifierName() в своем собственном классе Model и заставляете его возвращать поле по вашему выбору.

...