WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

Laravel5でユニークキーを追加するときにキーの名前を指定する

      2015/07/23

ユニークキーの名前が長すぎてエラーとなる

Laravel5でSchema BuilderのDSLを利用してユニークキーを追加すると、デフォルトでは”テーブル名_カラム名_unique”というキー名となる。
例えば、usersというテーブルに対して下記を実行した場合、キー名は”users_email_unique”となる。

$table->unique('email');

ただ、このフォーマットだと複数のカラムを利用してユニーク制約を作る場合は、下記のようにキー名が長すぎて`php artisan migrate`時にエラーとなることがある。

$ php artisan migrate
[Illuminate\Database\QueryException]
  SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'evolution_materials_base_monster_official_id_material_mo
  nster_official_id_unique' is too long (SQL: alter table `evolution_materials` add unique evolution_materials_base_monster_officia
  l_id_material_monster_official_id_unique(`base_monster_official_id`, `material_monster_official_id`))

これを回避するには自分でキー名を決めればOK。
下記のように`$table->unique()`の第二引数にキー名として使いたい文字列を指定できる。

	public function up()
	{
		//
		Schema::connection('monster_paradise')->table('evolution_materials', function($table) {
			$table->unique(['base_monster_official_id', 'material_monster_official_id'], 'key_name_here');
		});
	}

`down()`ではこのキー名を指定してdropすればOK。

	public function down()
	{
		//
		Schema::connection('monster_paradise')->table('evolution_materials', function($table) {
			$table->dropUnique('key_name_here');
		});
	}

 - Laravel , , ,