Migration Laravel primaire (ou clé) " le nom de L'identificateur est trop long"

J'ai un simple fichier de migration Laravel spécifiant une clé primaire composite :

// ...

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

// ...

Et lors de l'exécution php artisan migrate cette erreur est générée :

SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'my_super_long_table_name_column_1_column_2_column_3' is too long
17
demandé sur Ifnot 2015-02-20 13:37:17

1 réponses

spécifiez simplement le nom de la clé lors de sa création (avec le second argument pour primary).

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

suivant,

si vous avez une erreur comme You have an error in your SQL syntax ... après cette modification s'il vous plaît assurez-vous que vous n'utilisez pas le mot réservé par votre moteur de base de données pour votre nom de clé.

par exemple pour MySQL : http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

Astuce : primary est réservée, donc ne l'utilisez pas ;)

32
répondu Ifnot 2015-02-20 10:37:17