2015-02-20 5 views
13

ich einfach Laravel Migrationsdatei haben einen zusammengesetzten Primärschlüssel festgelegt wird:Laravel Migration primäre (oder Schlüssel) "Identifier Name ist zu lang"

// ... 

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']); 
    }); 
} 

// ... 

Und beim Laufen php artisan migrate dieser Fehler ausgelöst wird:

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

Es könnte hilfreich sein, wenn Sie die genaue Version angeben können Sie aus und die Version migrieren Sie‘ re Migrieren zu. – nwellnhof

+0

Die Migration in Laravel ist eine Datei, die die Datenbankstruktur definiert. Kein "echter" Migrationsprozess von einer Version zur anderen einer App. – Ifnot

Antwort

27

Geben Sie bei der Erstellung einfach den Schlüsselnamen an (mit dem zweiten Argument für primary).

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

Als nächstes

Wenn Sie Fehler wie You have an error in your SQL syntax ... nach dieser Änderung haben, bitte stellen Sie sicher, nicht für die Schlüsselnamen Ihrer Datenbank-Engine reserviertes Wort verwenden.

zB für MySQL: http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

Tipp: primary ist reserviert, so verwenden Sie es nicht;)

+6

Schön! Es funktioniert auch für Fremdschlüssel '$ table-> Foreign ('foreign_column', 'fk_name') -> Referenzen ('id') -> on ('foreign_table');'. –

+0

Müssen Sie bei der Definition der Beziehung im Modell auch den FK-Namen angeben? – briankip