1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel】結局、Model(モデル)って何ができるの?役割を3つに凝縮して超シンプルに解説

1
Posted at

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の開発がグッと楽になりますよ!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?