初めに
こんばんは、だいごです。
今回は、最近学習を始めたLaravelのマイグレーションについてまとめていこうと思います。
たまに、Railsとの比較を交えながらまとめていきます。
よかったらご覧ください。
マイグレーションの生成
まずは、マイグレーションの生成を行います。
生成に関するコードは以下になります。
# Laravel
% php artisan make:migration create_テーブル名(複数形)_table
# Ruby on Rails
% rails g model モデル名(単数系)
このコマンドのポイントとしては、テーブル名が複数形
になるところです。
Railsではテーブル名は単数系なので、注意が必要です。
マイグレーションの構造
ここでは、生成されたマイグレーションを見ていきます。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('テーブル名', function (Blueprint $table) {
$table->id();
$table->データの型('カラム名'); /* カラムの追加 */
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('テーブル名');
}
};
ここでのポイントは、up
とdown
のメソッドです。
up
メソッドは、データベースに新しいテーブル、カラム、またはインデックスを追加するために使用し、
down
メソッドは、upメソッドの逆の操作を行い、テーブルやカラムの削除やupメソッドが行なった操作を戻すために使用します。
また、$table->データの型('カラム名')
をupメソッド内に記載することでカラムの追加をすることができます。
マイグレーションの実行
ここからは、生成したマイグレーションを実行していきます。
以下のコマンドを実行します。
# Laravel
% php artisan migrate
# Ruby on Rails
% rails db:migrate
このマイグレーションが実行されているか確認する場合には、以下のコマンドを実行します。
# Laravel
% php artisan migrate:status
# Ruby on Rails
% rails db:migrate:status
この2つのコマンドはLaravelもRailsもかなり似ているように感じます。
マイグレーションのロールバック
最新のマイグレーションを1つロールバックしたい場合には、以下のコマンドを実行します。
# Laravel
% php artisan migrate:rollback
# Ruby on Rails
% rails db:rollback
また、上記のコマンドでは最新の1つのマイグレーションしかロールバックできないため、step
オプションを与えることで、複数のマイグレーションをロールバックすることができます。
# Laravel
% php artisan migrate:rollback --step=数値
上記のように記載した場合には、最新のマイグレーションを数値の分だけロールバックできます。
さらに、全てのマイグレーションをロールバックしたい場合には、以下のコマンドを実行します。
# Laravel
% php artisan migrate:reset
他にも、マイグレーションのロールバックと実行を1つのコマンドで実行できるものがありますが、今回は省略します。
最後に、参考を載せるのでそちらをご覧ください。
テーブル/カラムの存在確認
ここでは、hasTable
およびhasColumn
メソッドを使用して、テーブルまたは列の存在を確認していきます。
# laravel
if (Schema::hasTable('テーブル名')) {
// "users"テーブルは存在していた
}
# laravel
if (Schema::hasColumn('テーブル名', 'カラム名')) {
// "カラム名"カラムを持つ"テーブル名"テーブルが存在していた
}
この記述を用いた条件分岐で、同名のテーブルがない場合にテーブルを作成するなどの、コードを作成できます。
終わりに
今回は自身のLaravel学習の進捗分だけマイグレーションについてまとめました。
ここに記載していないことでも重要なことはたくさんあるので、学び次第追記していこうと思います。
ご指摘・コメント等お待ちしています。
ありがとうございました。
参考