Laravelのmigrationでテーブルにunique制約を追加する

Laravelのmigrationでテーブルにunique制約を追加するには、$table->unique() メソッドを使います。

以下で説明していきます。

migration(マイグレーション)とは

マイグレーションとは、データベースのバージョンを管理する機能です。

あるテーブルへの変更をphpのコードで記述しておく事で、チームの他のメンバーにも変更内容を共有することができます。

マイグレーションという仕組みはLaravel以外のWebフレームワークでも採用されています。

マイグレーションファイルを生成する

まずはphp artisan コマンドでmigrationのphpファイルを自動生成します。

例えばbooksという名前のテーブルを更新したいとして、以下のようにします。

php artisan make:migration update_books_add_unique --table="books"

Laravelプロジェクトのdatabase/migrations ディレクトリ以下にマイグレーションファイルが作られるます。

update_books_add_uniqueの部分はマイグレーションの名前で、好きなものを指定できます。
分かりやすい名前をつけましょう。
マイグレーションはファイル名の順番に実行されるため、この名前の前にタイムスタンプの文字列が追加されます。

追加されたファイルに、変更を加えたい内容をphpで記述します。

マイグレーションファイルの編集

データベースのテーブルにどのような変更を加えるかを、マイグレーションファイルに記述していきます。

ここでは例として、asin というフィールドをユニークにします。(ASINとはAmazonが管理している商品コードみたいなもの)

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class UpdateBooksAddUnique extends Migration
{
  /**
  * Run the migrations.
  *
  * @return void
  */
  public function up()
  {
    Schema::table('books', function (Blueprint $table) {
      // ここを追加。$table->unique('カラム名');で、カラムにunique制約を追加します。
      $table->unique('asin');
    });
  }

  /**
   * Reverse the migrations.
   *
   * @return void
   */
  public function down()
  {
    Schema::table('books', function (Blueprint $table) {
      // ここを追加。マイグレーションでバージョンが巻き戻された場合に、unique制約を削除するコードを記述しておきます。
      $table->dropUnique('asin');
    });
  }
}

up()メソッドはマイグレーションが実行された時に呼び出されます。
この中で$table->unique('asin');を実行することで、テーブルのカラムにユニーク制約を追加します。

down()メソッドはマイグレーションでバージョンを巻き戻した時に呼び出されます。
ここにはup()と逆の処理を記述します。
今回は$table->dropUnique('asin');でカラムからユニーク制約を削除しています。

マイグレーション実行

編集が終わったらphp artisan migrate コマンドを実行します。

するとマイグレーションファイルが実行され、テーブルにユニーク制約が追加されます。

以上です。

逆引きLaravel目次

Laravelをインストールする

LaravelでレスポンスをJSON形式で返す

LaravelでレスポンスをJSONP形式で返す

Laravelでクエリパラメータを取得する

LaravelでPOSTされたデータを取得する

Laravelでルートパラメータ(パスパラメータ)を取得する

Laravelでリクエストパラメータがあるかチェックする

LaravelでフォームのMethodをPUTやDELETEに変える

Laravelでリダイレクトする

Laravelでフォームリクエストの型を定義してバリデーションする

Laravelのコントローラのアクションでモデル型を受け取る(モデル結合ルート)

Laravelで現在表示しているページのURLを取得する

LaravelでCookie(クッキー)の取得、書き込み、削除をする

Laravelで定数を使う

Laradock

Laradockをインストールする

Laradockのworkspaceの共有ディレクトリを変更する

データベース

Laravelでデータベースにテーブルを追加する

Laravelでデータベースのテーブル名を変更する(マイグレーション)

LaravelでデータベースにInsertする。

Laravelでデータベースのテーブルにカラムを追加する(マイグレーション)

Laravelで指定したカラムの次にカラムを追加する(マイグレーション)

Laravelでテーブルのカラム名を変更する(マイグレーション)

Laravelのmigrationでテーブルにunique制約を追加する

Laravelで強制的にmigrationを実行する

Laravelでマイグレーションのロールバックを行う

ルーティング

LaravelでAPIのルーティングを追加する

Laravelで特定のプレフィックスがついたURLのルーティングをまとめて定義する

Laravelのルーティングファイルを追加する

ミドルウェア

Laravelでリクエストの前後に共通の処理を行う

Laravelで特定のルーティングに共通の処理を入れる

認証

Laravelで未ログインユーザーがアクセスしたらログインフォームを表示する

LaravelのViewでログイン状態によって表示切替する方法

Laravelでログイン状態かどうかをチェックする

Laravelでログイン中のユーザーの情報を取得する

Laravelでログイン中のユーザー情報を更新する

多言語対応

Laravelで現在のロケールを取得する

コマンドライン

Laravelでコマンドラインアプリケーションを作る

タイトルとURLをコピーしました