Laravel 迁移 "Identifier name is too long"

Laravel migration "Identifier name is too long"

SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'gjsdjuejwpls_personal_access_tokens_tokenable_type_tokenable_id_index' is too long (SQL: alter table gjsdjuejwpls_personal_access_tokens add index gjsdjue jwpls_personal_access_tokens_tokenable_type_tokenable_id_index(tokenable_type, tokenable_id))

请告诉我如何解决这个错误。 Vedas 立即以安装成本迁移。

public function up()
{
    Schema::create('personal_access_tokens', function (Blueprint $table) {
        $table->id();
        $table->morphs('tokenable');
        $table->string('name');
        $table->string('token', 64)->unique();
        $table->text('abilities')->nullable();
        $table->timestamp('last_used_at')->nullable();
        $table->timestamps();
    });
}

您可以提供更短的索引名称作为迁移中 morphs() 的第二个参数

public function up()
{
    Schema::create('personal_access_tokens', function (Blueprint $table) {
        $table->id();

        // Provide shorter index name as the second argument
        $table->morphs('tokenable', 'personal_access_tokenable_index');
        $table->string('name');
        $table->string('token', 64)->unique();
        $table->text('abilities')->nullable();
        $table->timestamp('last_used_at')->nullable();
        $table->timestamps();
    });
}

MySQL 索引名称的长度限制为 64 个字符 -(请参阅 Bill Karwin 在下面的评论中发布的 link)。默认情况下 Laravel 使用 table_name_column(s)_name(s)_index 作为标识符(索引名称)的格式。因此,如果超过 64 个字符的限制,则会抛出错误