L

モデルの基本 — テーブルをオブジェクトとして扱う

SQLを書かずにデータベースを操作できる「Eloquent」とモデルの仕組みを、まったくの初心者向けにやさしく解説します。

広告枠(記事上)— 本番では AdSense 広告が表示されます

ここからは、データベースのデータを自由に読み書きしていきます。Laravel では Eloquent(エロクアント) という仕組みを使うと、難しい命令を書かずにデータを操作できます。

MVC の M(モデル=データの担当) が、いよいよ主役になります。

Eloquent と ORM とは

データベースを操作するとき、本来は SQL(エスキューエル) という専用の命令文を書きます。たとえば「posts 表の全部を取ってきて」は、SQLだと SELECT * FROM posts; のように書きます。最初はこれを覚えるのが大変です。

そこで Laravel の Eloquent は、SQLを書かなくても、PHPのコードでデータベースを操作できるようにしてくれます。

このように「データベースの表を、PHPのオブジェクト(もの)として扱えるようにする仕組み」を ORM(オーアールエム) と呼びます。Eloquent は Laravel の ORM です。

かみ砕くと「1行のデータ = 1つのPHPオブジェクト」として扱える、ということです。posts 表の1件の投稿が、$post という1つの変数になり、$post->title でタイトルを取り出せます。

モデルとは

その「表に対応するPHPのクラス」が モデル です。posts 表には Post モデル、users 表には User モデル、という具合に、1つの表に1つのモデルが対応します。

モデルを作る

make:model コマンドでモデルを作ります。

php artisan make:model Post

app/Models/Post.php が作られます。中身はとてもシンプルです。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    //
}

これだけで、Post モデルは posts 表とやりとりできるようになります。

名前のルール(命名規則)

Post モデルが posts 表につながる」のには、Laravel のルールがあります。

  • モデル名は単数形・先頭大文字Post
  • 対応する表は複数形・小文字posts

この対応を Laravel が自動で結びつけてくれるので、設定は不要です。**「単数の Post クラス ↔ 複数の posts 表」**と覚えておきましょう。

さっそく使ってみる

モデルを使うと、たとえば全件取得はこう書けます。SQLは一切登場しません。

use App\Models\Post;

$posts = Post::all();   // posts 表の全データを取得

ID で1件だけ取り出すこともできます。

$post = Post::find(1); // id が 1 の投稿を取得
echo $post->title;     // その投稿のタイトルを表示

データベースの1行が $post というオブジェクトになり、列の値を $post->title のように -> で取り出せています。これが ORM の便利なところです。

まとめ

  • Eloquent は、SQLを書かずにPHPでデータベースを操作できる Laravel の ORM
  • ORM = 表の1行を1つのPHPオブジェクトとして扱う仕組み。
  • 表に対応するクラスが モデルmake:model Post で作成。
  • 命名規則は「単数・大文字の Post ↔ 複数・小文字の posts 表」。
  • Post::all() で全件、Post::find(1) で1件取得。
  • 次の単元では、**登録・取得・更新・削除(CRUD)**を一通り学びます。
広告枠(記事下)— 本番では AdSense 広告が表示されます