【Laravel8】sanctumを使ってトークンを作成する際に、SQLエラーとなる場合の対処方法

Laravel

スポンサーリンク

sanctumを使って、createTokenを行う際に以下のようなエラーが出た。

"SQLSTATE[22P02]: Invalid text representation: 7 ERROR:  invalid input syntax for type bigint: \"9357bb40-3353-4910-adae-5aa650bf0c36\" (SQL: insert into \"personal_access_tokens\" (\"name\", \"token\", \"abilities\", \"tokenable_id\", \"tokenable_type\", \"updated_at\", \"created_at\") values ($request->user()->user_id, 7177becea6ffb882e6181ede027bd00079d73df22e2e0b07c9d1be005a8f2b60, [\"*\"], 9357bb40-3353-4910-adae-5aa650bf0c36, App\\Models\\User, 2021-05-03 22:55:40, 2021-05-03 22:55:40) returning \"id\")"

personal_access_tokensテーブルのidカラムにbigintではなく、uuid(“9357bb40-3353-4910-adae-5aa650bf0c36\")が入ってるから出ているエラーのようです。

原因

ユーザーテーブルのprimarykeyをuuidに変更している場合に起きるようです。

解決方法

database/migrations/2019_12_14_000001_create_personal_access_tokens_table.phpファイルの"morphs"を"uuidMorphs"に変更するだけ。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePersonalAccessTokensTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('personal_access_tokens', function (Blueprint $table) {
            $table->bigIncrements('id');
            // $table->Morphs('tokenable'); ←削除
            $table->uuidMorphs('tokenable'); // 追加
            $table->string('name');
            $table->string('token', 64)->unique();
            $table->text('abilities')->nullable();
            $table->timestamp('last_used_at')->nullable();
            $table->timestamps();
        });
    }

// 以下省略

Laravel

Posted by ton