Первичный (или ключ) миграции 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
Ответы
Ответ 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
зарезервирован, поэтому не используйте его;)