Tech Starlog

Laravel Model(Eloquent)の基本的な使い方まとめ

投稿日:2026/01/10

Laravelでは、データベース操作をEloquent ORMと呼ばれる仕組みで直感的に扱うことができます。
本記事では、Modelの基本的な役割から、よく使う操作までを整理します。


本記事で使用するサンプル構成

  • テーブル名:samples
  • Model:Sample

Modelとは?

Modelは、データベースのテーブルを1つのクラスとして扱う仕組みです。

例:

samplesテーブル ←→ Sampleモデル(App\Models\Sample)
  • テーブル = Modelクラス
  • レコード = Modelインスタンス

というイメージです。


Modelの作成

Laravelでは、コマンド1つでModelを作成できます。

php artisan make:model Sample

マイグレーションも同時に作成する場合:

php artisan make:model Sample -m

※ マイグレーションとは、テーブル設計をコードで管理する仕組みです。


Modelの基本形

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Sample extends Model
{
    //
}

何も書いていなくても、Laravelが自動的にsamplesテーブルと紐付けてくれます。


テーブル名と主キー

テーブル名の規約

  • Model名:単数形(Sample)
  • テーブル名:複数形(samples)

規約と異なる場合は明示的に指定します。
テーブル名がsamplesではなく、test_samplesの場合は下記のように指定します。

protected $table = 'test_samples';

主キー

protected $primaryKey = 'id';

一括代入(Mass Assignment)

一括代入(Mass Assignment)とは、フォームから受け取った値をまとめて保存できる便利な仕組みです。

$fillable

一括代入で保存してよいカラムを指定するための設定

protected $fillable = [
    'name',
    'value',
    'published_at',
];

$guarded

一括代入で保存してはいけないカラムを指定するための設定

protected $guarded = ['id'];

なぜ必要?

  • セキュリティ対策
  • 「保存してよいカラム」を明示するため
  • 最初のうちは「createを使用するならfillableが必要」と覚えておけばOK

データの取得(Read)

全件取得

$samples = Sample::all();

samplesテーブルのデータを全件取得します。

条件付き取得

$samples = Sample::where('is_published', true)->get();

上記の場合は公開済みのデータだけ取得しています。

1件だけ取得

いずれかの方法で取得可能です。

$sample = Sample::find(1);
$sample = Sample::first();
$sample = Sample::firstOrFail();
$sample = Sample::firstOrFail(1);
  • find:見つからなければnull
  • first:見つからなければnull、存在チェック用途でよく使用されます。
  • firstOrFail:見つからなければエラー、存在しない場合に画面等で404エラーにしたいなら使用すると良いです。

データの作成(Create)

createメソッド

createメソッドを使用したデータ作成です。

Sample::create([
    'name' => '名前',
    'value' => '値',
    'is_published' => true,
]);

SQLのINSERTを書かなくてもPHPだけで保存できます。
※ $fillableの設定が必須です。

saveメソッド

saveメソッドを使用したデータ作成です。

$sample = new Sample();
$sample->name = '田中太郎';
$sample->value = 'サンプル';
$sample->save();

データの更新(Update)

$sample = Sample::find(1);
$sample->value = '更新後サンプル';
$sample->save();

流れとしては、

  1. データを取得
  2. 値を変更
  3. save()で保存

という3ステップです。

updateメソッド

updateメソッドを使用したデータ更新です。

Sample::where('id', 1)->update([
    'value' => '更新後サンプル',
]);

データの削除(Delete)

deleteメソッド

deleteメソッドを使用したデータ削除です。

$sample = Sample::find(1);
$sample->delete();

タイムスタンプ

Laravelでは以下のカラムが自動管理されます。

  • created_at
  • updated_at

無効にする場合:

public $timestamps = false;

クエリスコープ(Scope)

よく使う条件をModelにメソッドとしてまとめられます。

public function scopePublished($query)
{
    return $query->where('is_published', true);
}

使用時は、Sample::published()だけでOK

Sample::published()->get();

Laravel側で自動的に

scopePublished()

が呼ばれるため、scopeは書かなくても良いです。


Controllerでの使用例

公開済みのサンプルデータを新しい順で取得する例です。

public function index()
{
    $samples = Sample::published()->latest()->get();
    return view('samples.index', compact('samples'));
}
  • Model:データ取得
  • Controller:処理の流れ
  • View:画面表示

という役割分担になります。


まとめ

  • Model = データベース操作担当
  • SQLを書かなくてもデータ操作できる
  • create / save / delete をまず覚える
  • テーブル名は 複数形、Model は 単数形