2015-02-20 11 views
13

devo semplice file di migrazione laravel specificare una chiave primaria composta:laravel primaria migrazione (o chiave) "Identifier name è troppo lungo"

// ... 

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

// ... 

E quando si esegue php artisan migrate è gettato questo errore:

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

che potrebbe essere utile se si potesse specificare la versione esatta si sta migrando da e la versione che si' migrare a. – nwellnhof

+0

La migrazione in laravel è un file che definisce la struttura del database. Non è un processo di migrazione "reale" da una versione all'altra di un'app. – Ifnot

risposta

27

Specificare semplicemente il nome della chiave durante la sua creazione (con il secondo argomento per primary).

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

Avanti,

Se si dispone di errore come You have an error in your SQL syntax ... dopo questa modifica si prega di assicurarsi che non si utilizza parola riservata dal motore di database per il nome della chiave.

Ad esempio per MySQL: http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

Suggerimento: primary è riservata, quindi non ne fanno uso;)

+6

Bello! Funziona anche con chiavi esterne '$ table-> foreign ('foreign_column', 'fk_name') -> references ('id') -> on ('foreign_table');'. –

+0

Devi anche specificare il nome FK quando si definisce la relazione nel modello? – briankip