Имя миграции Laravel слишком длинное - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь перенести все приложение 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 Слишком длинное имя идентификатора «mission_user_user_id_permission_id_user_type_project_id_unique »(SQL: таблица изменений permission_user добавить уникальный permission_user_user_id_permission_id_user_type_project_id_unique (user_id, permission_id, user_type, project_id)) `

Когда я удаляю код выше, все работает хорошо. Что случилось? Я ничего не нахожу?!

1 Ответ

0 голосов
/ 09 сентября 2018

Способ генерации уникального ключа у 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...