前書き
この記事は自分のための学習アウトプットメモです。
職場でphpを利用してシステムを運用しているので、ある程度の知識を得ておきたいと思い学習を開始しているだけなので、どうぞ暖かく見守ってくれたら嬉しいです。
この記事の目的
laravelのモデルの作成とマイグレーションについてまとめる。
※ MVCの概念については、Ruby on Railsの学習である程度把握しているので、あんまり深く触れるつもりないよ。
M - Model -について
DBとのやりとりを担当する役割を担う。
DBとのやりとりは、Railsと同様でORMでやりとりをする様子。
ORM -> Object Relational Mapping
つまるところ、SQL文を書くんじゃなくて、phpの構文でSQLとやりとりするって意味(だと思っている)
ORMについて個人的な疑問。
フレームワーク側で構文を準備してくれていることはありがたいんだけど、 SQL文とか直接書いた方が効率良さそうに感じてしまう。
素人目からすると、わざわざphpの構文で記述 → それをSQL文として読み取ってDBとやりとり。という形をとっているように見えて二度手間に感じてしまう。
この辺りは後日調べてみよう。
もしかしたら、データベースの種類ごとに構文が変わる?だからphp側で構文を用意しておけば、どのDBを利用しているかを意識する必要がない。とか・・・?
モデルの作り方
ターミナル上(モデルを作りたいプロジェクトのディレクトリ配下)で、以下のコマンドを実行
php artisan make:model {作成したいモデル名}
そうすると、/app/Models配下に作成される。
作成されたファイルの中身を見ると、class名が{作成したいモデル名}と同じで、そのクラスはModelクラスを継承していることが確認できる。
モデル名は単数系かつ、頭は大文字
例)
User -> ◯
user -> ×
Users -> ×
※補足
コントローラーとマイグレーションも同時に行うことができたりもする。
その場合は、作成時のコマンドにオプションを追記すればOK
php artisan make:model {作成したいモデル名} -mc
m:マイグレーション、c:コントローラーって覚えておけば忘れにくそう。
マイグレーションファイルを作ってModelに紐づくテーブルを作成する
基本的にModelとテーブルは1対1でペアになる(と思っている)ので、さっき作ったModelで参照するテーブルを作成する。
そのためには、テーブルを作るための設計書的な立ち位置のmigrationファイルを作成する必要がある
migrationファイルの作り方
ターミナル上(モデルを作りたいプロジェクトのディレクトリ配下)で、以下のコマンドを実行
php artisan make:migration create_{作成したモデルの名前の複数形}_table
これを実行すると、app/database/migrations配下に、以下命名規則に則ったmigrationファイルが作成される
yyyy_mm_dd_hhmmss_create_※※※※※※_tables.php
これがさっき言ってた「テーブルを作るための設計書的な立ち位置のmigrationファイル」になる。
必要なカラムなどを追記する
yyyy_mm_dd_hhmmss_create_※※※※※※_tables.php
ファイルを開いて、追加したいカラムを記載する
/*
省略
*/
public function up()
{
Schema::create('{コマンドで指定した複数形の名前}', function (Blueprint $table) {
$table->id();
/*
この辺りに追加したいカラムを記述する。
例) 年齢を管理するカラム`age`を追加する場合
$table->integer('age');
*/
$table->timestamps();
});
}
/*
省略
*/
Laravelで利用できるデータ型は以下のドキュメント参照
https://readouble.com/laravel/9.x/ja/migrations.html#column-method-bigIncrements
DBへの反映
必要なカラムを追記したら、DBに反映させる作業が必要になる。
ターミナル上で以下のコマンドを実行することでDBへ反映可能。
php artisan migrate
最後に
基本的に自分向けのメモなので、参考にする方などはいらっしゃらないと思いますが、
もしどなたか有識者がこの記事を目にして「あ、いやなんかそこ認識違うぞ」と思う箇所あればご指摘いただければ幸いですm(_ _)m
(そのためにあえてこの駄文を公開設定しているので・・・笑)