web-dev-qa-db-ja.com

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
22
Ifnot

作成時にキー名を指定するだけです(primaryの2番目の引数を使用)。

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

次、

この変更後にYou have an error in your SQL syntax ...のようなエラーが発生した場合は、データベースエンジンによってキー名として予約済みのWordを使用していないことを確認してください。

たとえばMySQLの場合: http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html

ヒント:primaryは予約されているため、使用しないでください;)

48
Ifnot