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 个字符的限制,则会抛出错误
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 个字符的限制,则会抛出错误