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();
流れとしては、
- データを取得
- 値を変更
- 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 は 単数形