Laravel passport createToken без пользовательской модели

#laravel #laravel-passport

#laravel #laravel-passport

Вопрос:

Обычно я могу создать токен следующим образом:

 $user = User::find( $tokenData['user_id'] );
return $user->createToken($tokenData['name'])->accessToken;
  

Поскольку у меня есть доступ к user_id , возможно ли создать токен без создания еще одного запроса ( User::find )?

Потому что теоретически сам токен не имеет ничего общего с объектом user, кроме user_id (который у меня есть в массиве TokenData).

Ответ №1:

Это createToken метод из HasApiTokens признака:

 public function createToken($name, array $scopes = [])
{
    return Container::getInstance()->make(PersonalAccessTokenFactory::class)->make(
        $this->getKey(), $name, $scopes
    );
}
  

Исходя из этого, кажется, что вы могли бы изменить свой код на:

 return app(LaravelPassportPersonalAccessTokenFactory::class)->make($tokenData['user_id'], $tokenData['name'])->accessToken;
  

При этом, вероятно, было бы лучше просто сделать один дополнительный запрос. Вы бы усложнили чтение, понимание и обслуживание вашего кода, чтобы сэкономить, возможно, 1 миллисекунду. Компромисс, похоже, того не стоит.