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でフォームのMethodをPUTやDELETEに変える
Laravelでフォームリクエストの型を定義してバリデーションする
Laravelのコントローラのアクションでモデル型を受け取る(モデル結合ルート)
LaravelでCookie(クッキー)の取得、書き込み、削除をする
Laradock
Laradockのworkspaceの共有ディレクトリを変更する
データベース
Laravelでデータベースのテーブル名を変更する(マイグレーション)
Laravelでデータベースのテーブルにカラムを追加する(マイグレーション)
Laravelで指定したカラムの次にカラムを追加する(マイグレーション)
Laravelでテーブルのカラム名を変更する(マイグレーション)
Laravelのmigrationでテーブルにunique制約を追加する
ルーティング
Laravelで特定のプレフィックスがついたURLのルーティングをまとめて定義する
ミドルウェア
認証
Laravelで未ログインユーザーがアクセスしたらログインフォームを表示する
LaravelのViewでログイン状態によって表示切替する方法