Подтвердить что ты не робот

Первичный (или ключ) миграции Laravel "Идентификатор слишком длинный"

У меня есть простой файл миграции Laravel, определяющий составной первичный ключ:

// ...

public function up()
{
    Schema::create('my_super_long_table_name', function($table)
    {
        $table->integer('column_1');
        $table->integer('column_2');
        $table->integer('column_3');

        $table->primary(['column_1', 'column_2', 'column_3']);
    });
}

// ...

И при запуске php artisan migrate эта ошибка выдается:

SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'my_super_long_table_name_column_1_column_2_column_3' is too long
4b9b3361

Ответ 1

Просто укажите имя ключа при его создании (со вторым аргументом для primary).

$table->primary(['column_1', 'column_2', 'column_3'], 'my_long_table_primary');

Далее

Если после этой модификации появилась ошибка, например You have an error in your SQL syntax ..., пожалуйста, убедитесь, что вы не используете зарезервированное слово вашим механизмом базы данных для вашего имени ключа.

Например, для MySQL: http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

Совет: primary зарезервирован, поэтому не используйте его;)