Laravel入門 これだけ読んどけ! マイグレーションを理解する

今回はマイグレーションファイルの作成方法とデータ型の種類、カラムの変更や追加などを解説させていただきます。

テーブルを作成する

まずは新規にテーブルを作成する手順からです!

マイグレーションファイルの作成

Laravelではartisanコマンドを使用することができ、必要なファイルを簡単に作成することができます。

マイグレーションファイルを作成する場合は

php artisan make:migration create_テーブル名(複数形)_table

上記のコマンドを実行することで作成することができます。

今回はpostsというテーブルを作成して解説していきます。

php artisan make:migration create_posts_table

マイグレーションファイルの記述

マイグレーションファイルを作成することができたら実際にテーブルの設計を記述していきましょう。

$table -> データ型('カラム名');

この書式で記入することで宣言することができます。

今回はこのような感じにしました。

Schema::create('posts', function (Blueprint $table) {
  $table->increments('id');
  $table->string("title");
  $table->string("comment");
  $table->timestamps();
});

データ型一覧

Laravelのマイグレーションファイルではstringやinteger以外にも指定できるデータ型がたくさんありますのでよく使用するものを下記に一覧表を記載しておきます!

コマンド説明
$table->bigIncrements('id');符号なしBIGINTを使用した自動増分ID(主キー)
$table->boolean('confirmed');BOOLEANカラム
$table->char('name', 100);オプションの文字長を指定するCHARカラム
$table->date('created_at');DATEカラム
$table->text('description');TEXTカラム
$table->timestamps();NULL値可能なcreated_atupdated_atカラム追加
$table->ipAddress('visitor');IPアドレスカラム
$table->integer('votes');INTEGERカラム
$table->json('options');JSONフィールド

修飾子の追加

Laravelてはカラムに装飾子を簡単に付け加えることができます。
先ほど解説した記述文にそのまま -> (アロー演算子)で繋げて記述するだけです。

例えばメールアドレスなど他のユーザーとかぶらないようにしたい場合は、

$table -> string('email') -> unique();

と書き加えることによって、重複した値を保存しないように設定できます。

カラムにnullを設定できるようにするには

$table -> string('email') -> unique() -> nullable();

とします。

カラム装飾子は

$table -> string(‘email’) -> unique() -> nullable();

のように -> でつなげて複数宣言することができます。

下記に装飾子一覧を記載しておきます。

装飾子一覧

装飾子説明
->after('column')指定カラムの次に他のカラムを設置(MySQLのみ)
->autoIncrement()整数カラムを自動増分ID(主キー)へ設定
->charset('utf8')カラムへキャラクタセットを指定(MySQLのみ)
->collation('utf8_unicode_ci')カラムへコロケーションを指定(MySQL/SQL Serverのみ)
->comment('my comment')カラムにコメント追加(MySQL/PostgreSQLのみ)
->default($value)カラムのデフォルト(default)値設定
->first()カラムをテーブルの最初(first)に設置する(MySQLのみ)
->nullable($value = true)(デフォルトで)NULL値をカラムに挿入する
->storedAs($expression)stored generatedカラムを生成(MySQLのみ)
->unsigned()整数カラムを符号なしに設定(MySQLのみ)
->useCurrent()TIMESTAMPカラムのデフォルト値をCURRENT_TIMESTAMPに指定
->virtualAs($expression)virtual generatedカラムを生成(MySQLのみ)
->generatedAs($expression)指定のシーケンスオプションで、識別カラムを生成(PostgreSQLのみ)
->always()識別カラムの入力を上書きするシーケンス値を定義(PostgreSQLのみ)

設定ファイルの反映

作成したマイグレーションファイルの設定は

php artisan migrate


とすることでデータベースに反映することができます。

migrateコマンドには上記の設定を反映するコマンド以外にも、様々な操作を行えます。

ロールバック

php artisan migrate:rollback

マイグレーションを1つ手前の状態に戻します。
アンドゥみたいな感じです。

さらに–stepのオプションをつけることで指定した回数分戻ることができます。

php artisan migrate:rollback --step=5

リセット

php artisan migrate:reset

今まで行ったマイグレーションを全てロールバックし初期状態のデータベースに戻します。

リフレッシュ

php artisan migrate:refresh

migrate:resetと同様に全てのマイグレーションをリセットし初期状態に戻した後、migrateコマンドを行います。

データベース全体を作り直したりする際に使用します。

refreshもstepオプションをつけることによって、指定回数分だけ戻ってmigrateすることができます。

php artisan migrate:refresh --step=5

テーブル・カラム変更

Laravelはデフォルトでは1度作成したテーブルのカラムを変更したり、削除したりすることはできません。

そのような操作を行うにはcomposerで新たにdbalと言うパッケージをインストールする必要があります。

dbalをインストール

composer require doctrine/dbal

dbalのインストールができたら次にマイグレーションファイルを作成していきます。

変更用のマイグレーションファイルを作成

こんな感じで作成します。

php artisan make:migration [操作addとかremoveとか]_カラム名_テーブル名 --table=テーブル名

生成することファイル名に特にこれといって決まりはないのですが、ファイル名を見ただけでどのような操作をしたかがわかるように僕はこのようなファイル名を使用することが多いです。

後ろの –テーブル名というのはマイグレーションファイルを作成するときに、このテーブルを操作すると指定するためのものです。

なので今回は先ほど作成したpostsテーブルを更新していきたいと思います。

カラムのデータ型の変更

postsテーブルのcommentカラムをstringからtextに変更してみます。

なので

php artisan make:migration change_comment_posts --table=posts

というコマンドでマイグレーションファイルを作成します。

カラムの属性を変更するにはchangeメソッドを使用します。

マイグレーションファイルの内容はこんな感じになります。

public function up() 
{
  Schema::table('posts', function (Blueprint $table) {
    $table -> text('comment') -> change();
  });
}

反映する際は先ほどと同じように

php artisan migrate

で反映することができ、同様にrollbackrefreshも使用することができます。

カラム名変更

カラム名の変更にはrenameColumnメソッドを使用します。

postsテーブルのcommentカラムをcontentに変更します。

先ほどと同じようにマイグレーションファイルを作ります。

php artisan make:migration rename_comment_content_posts --table=posts

コードはこんな感じです。

public function up() 
{
  Schema::table('posts', function (Blueprint $table) {  
    $table->renameColumn('comment', 'content');
  });
}

カラムの追加

誰が投稿したのかがわかるようにするためにuser_idというカラムを追加しようと思います。

php artisan make:migration add_user_id_posts --table=posts

って感じのコマンドになります。

コードは

public function up()
{
  Schema::table('posts', function (Blueprint $table) {
    $table -> string('user_id') -> default(0) -> after('id');
  });
}

これでuser_idというカラムがidカラムの後ろに追加されます。

afterやbeforeを指定しない場合はカラムの1番最後に追加されます。

カラム削除

カラムを削除するためにはdropColumnメソッドを使用します。

マイグレーションファイルを作成します。

php artisan make:migration drop_content_posts --table=posts

コードはこんな感じです

public function up()
{
    Schema::table('posts', function (Blueprint $table) {
        $table->dropColumn('content');
    });
} 

まとめ

これだけ覚えてしまえばLaravelを使ってアプリケーションを作成していくときに困ることなくデータベースを操ることができるかと思います!

Djangoなどであれはカラムを変更する際にこのような操作をしなくていいのですが、こちらはこちらで操作履歴が簡単に分かるというメリットがあるのでどちらがいいとは一概には言えませんが、Laravelを使用する以上必要な知識となるので覚えておきましょう!

困った時はまたこのブログに訪れてみてください!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です