2015-02-20 2 views
13

У меня есть простой 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 
+0

Это может быть полезно, если вы могли бы указать точную версию вы мигрирующей от и версию вы» переходить на. – nwellnhof

+0

Миграция в laravel - это файл, определяющий структуру базы данных. Не «реальный» процесс миграции из одной версии в другую. – Ifnot

ответ

27

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

+6

Ницца! Он также работает для внешних ключей '$ table-> foreign ('foreign_column', 'fk_name') -> ссылки ('id') -> on ('foreign_table');'. –

+0

Нужно ли указывать имя FK при определении отношения в модели? – briankip

Смежные вопросы