モデルの基本 — テーブルをオブジェクトとして扱う
SQLを書かずにデータベースを操作できる「Eloquent」とモデルの仕組みを、まったくの初心者向けにやさしく解説します。
ここからは、データベースのデータを自由に読み書きしていきます。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)**を一通り学びます。