代码之家  ›  专栏  ›  技术社区  ›  Peter

Laravel迁移名称太长

  •  0
  • Peter  · 技术社区  · 7 年前

    我正在尝试迁移整个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]:语法错误或访问冲突:1059标识符名称“permission\u user\u user id\u permission\u id\u user\u type\u project\u id\u unique”太长(SQL:alter table) permission_user 添加唯一的 permission_user_user_id_permission_id_user_type_project_id_unique user_id , permission_id , user_type , project_id ))`

    1 回复  |  直到 7 年前
        1
  •  2
  •   Simon R    7 年前

    laravel生成唯一密钥的方法太长。你可以通过

    $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');