Skip to main content

クエリビルダーとは

Laravelのクエリビルダーは、データベースクエリを流暢なインターフェースで構築・実行する仕組みです。DB ファサードの table() メソッドから始まり、メソッドチェーンでクエリを組み立てます。
内部ではPDOパラメーターバインディングを使用しているため、SQLインジェクション対策が自動的に行われます。
クエリビルダーはLaravelがサポートするすべてのデータベース(MySQL、MariaDB、PostgreSQL、SQLite、SQL Server)で動作します。データベースを切り替えても同じコードが使えます。

Eloquentとの使い分け

データの取得

全件取得

get()Illuminate\Support\Collection を返します。各レコードはPHPの stdClass オブジェクトです。

1件取得

特定カラムの値をリストで取得

大量データの分割処理

チャンク処理中にレコードを更新・削除する場合、chunk() ではなく chunkById() を使ってください。chunk() ではレコードのずれが生じることがあります。

ストリーミング(LazyCollection)

集計

レコードの存在確認

SELECT句

WHERE句

基本的な条件

条件のグループ化

whereIn / whereBetween / whereNull

whereLike(パターンマッチ)

whereAny / whereAll(複数カラムへの同一条件)

whereNullSafeEquals(NULL安全な等価比較)

whereNullSafeEqualsorWhereNullSafeEquals は、カラムの値を指定した値と比較する際に、2つの NULL 値を等しいとみなす比較を行います。 通常の = 演算子では NULL = NULLfalse になりますが、whereNullSafeEquals では NULL 同士を等しいと判定します。MySQLの <=> 演算子、PostgreSQLの IS NOT DISTINCT FROM に対応します。
通常の where('column', null)WHERE column IS NULL に変換されますが、whereNullSafeEquals('column', $value) はバインディングされた値が null であっても null でなくても一貫して動作します。ユーザー入力値が null になりうる場合に特に便利です。

JOIN

サブクエリJOIN

並び替え・グループ化・リミット

サブクエリ

Raw式

Raw式はSQL文字列として直接クエリに挿入されます。ユーザー入力を直接渡すとSQLインジェクションの危険があります。必ずバインディングを使って安全に記述してください。

INSERT / UPDATE / DELETE

INSERT

UPSERT(INSERT OR UPDATE)

UPDATE

DELETE

条件付きクエリ(when)

クエリ条件を動的に適用したいときは when() を使うと条件分岐をすっきり書けます。

デバッグ

dd() はデバッグ時に便利ですが、本番環境では絶対に使わないでください。toSql()getBindings() でSQLとバインディングを確認するのが安全です。

まとめ

クエリビルダーはEloquentよりも低レベルで、モデルのインスタンスではなく stdClass を返します。 リレーションやモデルイベント(オブザーバー)が不要な場合、クエリビルダーの方がシンプルで高速です。
最終更新日 2026年6月21日