「Laravel」について学習を始めたプログラミング初心者である私が、
ゆっくりではありますが、その学習記録をブログ記事として残させて頂いております。
同じような境遇の方の参考になったり、また「Laravel」を含めたプログラミング言語を学ぶきっかけになったりすれば良いなと思っております。
*WindowsとMacで多少処理が異なる部分があるかもしれません・・・。
本記事はWindowsを想定。Macの方で詰まったら、ググって調べてみてください。
(ローカル環境は開発済みとする。テキストエディタはVSCodeを用いる)
前置きが長くなりましたが、それでは下記からの本文をどうぞ!
マイグレーションとは?
LalavelはMVCモデルに基づき構成されており、本記事まで
・ビュー まとめ記事⑤
・モデル まとめ記事⑥
各々の記事で簡単にまとめてきました。
本記事では【マイグレーション】について解説していきます。
マイグレーションは英語で書くと【migration】となり、日本語だと【移行】を意味します。
マイグレーションを作成することで〔データベース〕に接続してテーブルの作成やカラムの変更が可能となります。
またマイグレーションは≪履歴を管理する≫と言う機能も備わっています。
マイグレーションファイルを作成してみよう
何事も実際にコードを叩いてみた方が分かりやすいと思うので、コマンドをターミナルに入力してみましょう。
php artisan make:migration マイグレーションファイル名
コマンド自体はモデルやコントローラーに類似していると思います。
注意点としては、
①この後に「migrate」のコマンドが出てくるが、マイグレーションファイルを作る際は「migration」
②マイグレーションファイル名は通例「create_○○_table」と命名することが多く、本記事でもその通例に沿う
③モデルファイルと紐づけるために、○○部分は複数形で命名する(またモデル名に沿う)
④○○は小文字から始める事が多い
前回の記事で「Test.php」と言うモデルファイルを作りました。
モデルファイル名は≪Test≫と大文字から始まり、単数形になっていることが分かります。
対してマイグレーションファイル名を「create_tests_table」とすることで、
Lalavel側が自動で判定して、モデルとマイグレーションを紐づけてくれます。
以下、謝罪と訂正!
自分で散々、○○部分は複数形で書きましょう と注意喚起をしたにも関わらず、
php artisan make:migration create_test_table(単数形✕)
と入力して、マイグレーションファイルを作成してしまいました💦
正しくはphp artisan make:migration create_tests_table(複数形○)
(そして、次の記事を書いている途中にエラーが出て気付く。笑)
記事の文章自体は以下訂正しておりますが、画像ファイルに関しては後から直せず申し訳ありません。
単数形で作成した間違った画像になっておりますので、画像については【test→tests】と読み替えて頂ければ幸いです。
本文へ戻る。
php artisan make:migration create_tests_table
実際にコマンド入力して、マイグレーションを作ってみます。
いつものようにカレントディレクトリ(cd)を対象ファイルまで移動して、
(*今回で言うと「laravel-test」なので、初めに「cd laravel-test」とコマンドを入力してます)
上記のphp artisanコマンドを入力しました。
INFOから始まる記述でsuccessfully(成功)と返ってますので、無事にファイルが作成されております。
ファイル自体はdatabese,migrationsフォルダ内に新規で作られています。
今回で言うと「2024_01_06_031836_create_tests_table」と言うファイルが出来ました。
2024~始まるファイルが作成されております!
*先ほど「create_tests_table」と言うマイグレーション名を付けましたが、
ファイル名の先頭に2024_01_06_031836と数字が付きました。
これは作成した年月日・時間を表していて、今回で言うと「2024年1月6日の03時18分36秒」に作成した事を意味しています(早起き!)。
マイグレーションは履歴管理の機能もあるという事で、このように年月日・時間の情報もファイルに加わるためです。
マイグレーションファイルの中身を確認
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('tests', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('tests');
}
};
いつも通り作成したファイルの中身を確認していきます。
3~5行目は〔use宣言〕、7行目はクラスの継承になります。
クラスの継承に関しては「return new class extends Migration」という事で、
もちろんMigrationが親クラスになりますが、今回はextendsの前に「return new class」と記述してあり、子クラスに当たる部分はどこか?と思われますが、
この書き方を≪無名クラス≫と言いまして、特に名前を付けることなくインスタンス化することが出来る機能となります。
ですので、今までと少しだけ書き方が異なりますが、このマイグレーションファイルには「Migration」クラスの機能がしっかりと継承されています。
7行目のクラスの継承の分に続いて、{}内には
・public function up(): void{}
・public function down(): void{}
の記述がみられると思います。
それぞれ、upメソッド、downメソッドと呼びます。
新規でカラムを追加するときなどはupメソッドの{}内に、
何かを削除するときはなどはdownメソッドの{}内にそれぞれ記述をしていきます。
初期から設定されているカラム
特にupメソッドの中身をもう少し詳しく見ていきましょう。
public function up(): void
{
Schema::create('tests', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
まず3行目のSchema::create()内の第一引数部分ですが、「’tests’」と記述があるのが分かると思いますが、
この部分は先ほど命名した「create_○○_table」部分が入ります。(テーブル名)
続く4、5行目は事前に設定されている初期カラムになりまして、
既に id(); timestamps(); と設定されていることが読み取れます。
なおtimestamps();は「created_at」(作成日時)、「updated_at」(更新日時)の2つのカラムを作成してくれます。
まとめ
マイグレーションの概要、作成、中身の確認まで本記事でまとめてみました。
実際にマイグレーションを用いた、テーブルの操作は次回記事で(後編)まとめさせて頂く予定です。
次回からデータベースも実際に登場して捜査していくので、いよいよバックエンドの勉強してるな~って感じになるかな?と思います。たぶん
それでは。
コメント