#環境
PHP 7.3.24
Laravel 6.20.30
MAMP
#migration(マイグレーション)とは?
マイグレーションとはDBのテーブルの履歴を管理するlaravelの機能です。
テーブルの追加や削除、カラムの追加や削除などをした際にその履歴が分かるような仕組みになっています。
php artisan migrate
コマンドを実行することで、SQL文を書かなくてもDBの変更や作成等が可能です。
#マイグレーションファイルの作成
php artisan make:migration マイグレーションファイル名
を実行することで、マイグレーションファイルを作成することができます。
マイグレーションファイルはdatabase /migrations
ディレクトリの中に作られます。
migrationsディレクトリ内には、デフォルトでいくつかのマイグレーションファイルがすでに作成されています。
【補足】
マイグレーションの実行コマンドはphp artisan migrate
ですが、
マイグレーションファイルの作成コマンドはmake:migrate
ではなくmake:migration
となるので混同しないように注意!
(makeは動詞なので、そのあとに動詞であるmigrateがくるのは英文法的にもおかしいですよね)
#テーブル追加のマイグレーションファイルを作成してみる
今回はtestsテーブルを作成していきます。
※テーブル名は複数形
ターミナルでLaravelプロジェクトに移動した後
php artisan make:migration create_tests_table
を実行します。
そしてdatabase/migrations
ディレクトリの中に2021_07_17_103246_create_tests_table.php
が作成されているので中を確認します。
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTestsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tests', function (Blueprint $table) {
$table->bigIncrements('id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tests');
}
}
###upメソッド
upメソッドはマイグレーションを実行する際に呼び出される関数です。
laravel初心者のため難しいところは一旦おいといて、重要の箇所のみまとめていきます!
$table->bigIncrements('id');
$table->timestamps();
// bigIncrements・・・莫大な数までを格納できる数値の型
// timestamps・・・自動でデータの作成日時(created_at)と更新日時(updated_at)を作成する型
upメソッド内のこの記述でidカラム、created_atカラム、updated_atカラムが作成されています。
これらのカラムはよく使うことが多いので、Laravelがデフォルトで作成してくれます。
他にも自分でカラムを追加したい場合はここに追記していきます。
###downメソッド
downメソッドはマイグレーション実行後に「やっぱりマイグレーション前の状態に戻したいなあ…」となったときに使うメソッドです。(この処理をロールバックと言います)
そのため、マイグレーション実行時にはdownメソッドは使われることはありません。
今の段階では、まだ何もマイグレーションファイルをいじっていないので
・testsテーブルの作成
・デフォルトのカラムを追加(id, created_at, updated_at)
だけをしている状態です。
この場合のマイグレーションを戻す処理は
・testsテーブルの削除
のみになります。
なぜなら今回は「テーブルを作成」したので、ロールバックの処理としては「テーブルを削除」するからです。
テーブルを削除すればカラムも消えるのでわざわざカラムを削除する記述はいらないってことですね。
public function down()
{
Schema::dropIfExists('tests');
}
#マイグレーションの実行
マイグレーションファイルを作成しただけではDBには反映されません。
php artisan migrate
というコマンドを実行して初めてDBに反映されます。
$ php artisan make:migration create_tests_table
Created Migration: 2021_07_17_151343_create_tests_table