我正在尝试迁移整个 Laravel 应用程序,当我编写下面的代码时出现一些错误。
// Create table for associating permissions to users (Many To Many Polymorphic)
Schema::create('permission_user', function (Blueprint $table) {
$table->unsignedInteger('permission_id');
$table->unsignedInteger('user_id');
$table->string('user_type');
$table->unsignedInteger('project_id')->nullable();.
$table->foreign('permission_id')->references('id')->on('permissions')
->onUpdate('cascade')->onDelete('cascade');
$table->foreign('project_id')->references('id')->on('projects')
->onUpdate('cascade')->onDelete('cascade');
$table->unique(['user_id', 'permission_id', 'user_type', 'project_id']);
});
错误:
SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'permission_user_user_id_permission_id_user_type_project_id_unique' is too long (SQL: alter table
permission_user
add uniquepermission_user_user_id_permission_id_user_type_project_id_unique
(user_id
,permission_id
,user_type
,project_id
))`
当我删除上面的代码时,一切正常。怎么了?我没有找到任何东西?!
最佳答案
laravel 生成唯一 key 的方式太长。您可以通过执行
来覆盖它$table->unique(['user_id', 'permission_id', 'user_type', 'project_id'], 'my_unique_ref');
此外,如果外键太长,您可以覆盖默认名称,但提供第二个参数。
$table->foreign('permission_id', 'my_new_reference')->references('id')->on('permissions')
->onUpdate('cascade')->onDelete('cascade');
关于php - Laravel 迁移名称太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52246703/