Laravelを学び始めたとき、「コントローラーやマイグレーションは分かるけど、モデル(Model)の役割がイマイチピンとこない…」となることはありませんか?
一言でいうと、モデルとは「データベースとPHPのあいだを繋ぐ、優秀な通訳(管理人)」です。
モデルができることは、複雑そうに見えて実は3つだけしかありません。これだけ覚えれば、モデルの基本はマスターです!
骨格となるベースコード(サンプル)
実務でよく使われる標準的な設定を盛り込んだ、安全なサンプルコードです。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class SampleItem extends Model
{
use SoftDeletes; // 論理削除を有効化
protected $connection = 'mysql'; // 接続DBの設定
protected $table = 'sample_items'; // 対象のテーブル名
// 一括保存を許可するカラム(ホワイトリスト)
protected $fillable = [
'category_id',
'title',
'status'
];
// データを取り出す際の型変換ルール
protected $casts = [
'status' => 'integer',
'released_at' => 'datetime',
];
// リレーション定義(他テーブルとの繋がり)
public function category()
{
return $this->belongsTo(Category::class, 'category_id', 'id');
}
}
1. データの「出し入れ」を簡単にする(CRUD操作)
ややこしいSQL文(SELECT * FROM... など)を書かなくても、PHPの簡単な命令だけでデータベースのデータを自由自在に操作(取得・保存・更新・削除)できるようになります。
-
データの取得:
SampleItem::find(1)(IDが1のデータを連れてきて!) -
データの保存:
SampleItem::create([...])(新しくデータを登録して!) -
データの更新:
$item->update([...])(中身を書き換えて!) -
データの削除:
$item->delete()(ゴミ箱にぽいして!)
これらを Eloquent(エロクアント) と呼び、直感的にDBを扱えるLaravelの強力な機能です。
2. データの「ルール」を一元管理する(データの守護)
データベースにデータを入れるとき、出すときの「共通ルール」をモデルに書いておけば、プログラム全体でそのルールが自動適用されます。
-
セキュリティ(
$fillable) -
「画面から送られてきたデータだけど、指定したカラム以外は絶対に勝手に書き換えさせないよ」と不正な書き込み(Mass Assignment 脆弱性)をガードします。
-
型変換(
$casts) -
「データベースには文字列で入っているけど、PHPで使うときは自動で『数値(integer)』や『日付オブジェクト(Carbon)』に変換しておくね」と、扱いやすい形に自動翻訳してくれます。
-
消し方のルール(
SoftDeletes) -
「削除ボタンが押されても、本当にデータを消すんじゃなくて『削除フラグ(削除日時)』を立てて非表示にするだけにするね(論理削除)」という設定が1行でできます。
3. テーブル同士の「繋がり」を教えてくれる(リレーション)
「このテーブルと、あのテーブルは繋がっているよ」という関係性をモデルに1行書いておくだけで、関連データを芋づる式に引っ張ってこれます。
例えば、「商品データ(SampleItem)」に紐づく「カテゴリ名(Category)」を取得したいとき:
// 「このデータに紐づいているカテゴリの情報をちょうだい」が1発でできる!
$categoryName = $item->category->name;
わざわざテーブル同士を結合(JOIN)する複雑なSQLを書かなくても、モデルが裏側で自動的に繋いでくれます。
💡 究極のまとめ
「データベースのテーブルごとに1つ用意する、データの『窓口』。これを通せば、安全に・簡単に・直感的にデータを扱えるようになる仕組み」
「データベースの操作で迷ったら、まずは該当するモデル(窓口)を見に行く」と覚えておくと、Laravelの開発がグッと楽になりますよ!