Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
27
Help us understand the problem. What is going on with this article?
@sato_ryu

Laravel でインデックスを作成、削除する

More than 1 year has passed since last update.

Laravelではデータベースの定義をマイグレーションを使って更新します。
最近、インデックスの作成や削除する際に、インデックス名の指定方法ではまりました。
ドキュメントをよく見ればわかるのですが、ここに注意点をまとめます。

ここに載せるサンプルコードは、マイグレーションファイル内に記述することを想定しています。

作成

テーブル定義時に作成

Schema::create('books', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title')->index();  # Index
    $table->string('isbn')->unique();  # Create unique index
    $table->integer('price');
    $table->integer('author_id');
    $table->timestamps();
});

この例では2つのインデックスを作成しています。
テーブルのカラム定義の時に作成したインデックスの名前は、${table_name}_${column_name}_${index_type} のように自動で生成されます。
例えばこのサンプルコードだと、作成されるインデックスの名前はそれぞれbooks_title_indexbooks_isbn_uniqueです。

indexuniqueメソッドの引数として文字列を渡すことで、インデックス名を指定することができます。

テーブル定義後に作成

Schema::table('books', function (Blueprint $table) {
    $table->index('title');
});

カラム名を指定することで作成できます。上と同様に、この時に作成されるインデックス名は${table_name}_${column_name}_${index_type}です。
第2引数に文字列を渡すことでインデックス名を指定できます。

複合インデックス

Schema::table('author_book', function (Blueprint $table) {
    $table->index(['author_id', 'book_id']);
});

複合インデックスは、インデックスの対象のカラム名を配列で指定することで作成できます。

削除

削除は、インデックスの種類ごとでメソッドが異なります。
通常のインデックスにはdropIndex、ユニークインデックスにはdropUniqueを使います。

:warning: 渡す引数の型によって削除する対象のインデックスが異なるで注意が必要です。

文字列を渡した場合

指定した文字列と同じ名前のインデックスを削除する。
:warning: カラム名では無いので注意

$table->dropIndex('books_title_index');

文字列の配列を渡した場合

先のインデックス名の生成ルールで作成したインデックス名を削除します。

$table->dropIndex(['title']);

この例の場合、books_title_indexという名前のインデックスを削除します。

複数の要素を持つ配列を渡した場合、その要素をカラム名とする複合インデックスを削除します。
複合インデックスの場合、配列で指定したカラムの順序がインデックス名にも影響するので、削除する際にもその順序を守る必要があります。

まとめ

ドキュメントはよく読みましょう。

参考

27
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
27
Help us understand the problem. What is going on with this article?