クエリビルダーとは
Laravelのクエリビルダーは、データベースクエリを流暢なインターフェースで構築・実行する仕組みです。DB ファサードの table() メソッドから始まり、メソッドチェーンでクエリを組み立てます。
クエリビルダーはLaravelがサポートするすべてのデータベース(MySQL、MariaDB、PostgreSQL、SQLite、SQL Server)で動作します。データベースを切り替えても同じコードが使えます。
Eloquentとの使い分け
データの取得
全件取得
get() は Illuminate\Support\Collection を返します。各レコードはPHPの stdClass オブジェクトです。
1件取得
特定カラムの値をリストで取得
大量データの分割処理
ストリーミング(LazyCollection)
集計
レコードの存在確認
SELECT句
WHERE句
基本的な条件
条件のグループ化
whereIn / whereBetween / whereNull
whereLike(パターンマッチ)
whereAny / whereAll(複数カラムへの同一条件)
whereNullSafeEquals(NULL安全な等価比較)
whereNullSafeEquals と orWhereNullSafeEquals は、カラムの値を指定した値と比較する際に、2つの NULL 値を等しいとみなす比較を行います。
通常の = 演算子では NULL = NULL は false になりますが、whereNullSafeEquals では NULL 同士を等しいと判定します。MySQLの <=> 演算子、PostgreSQLの IS NOT DISTINCT FROM に対応します。
通常の
where('column', null) は WHERE column IS NULL に変換されますが、whereNullSafeEquals('column', $value) はバインディングされた値が null であっても null でなくても一貫して動作します。ユーザー入力値が null になりうる場合に特に便利です。JOIN
サブクエリJOIN
並び替え・グループ化・リミット
サブクエリ
ベクター類似検索
埋め込みベクトルを保存したカラムに対して、whereVectorSimilarTo を使うと指定したベクトルに近いレコードだけを検索できます。ベクターカラムは、マイグレーションで vector 型として定義します(マイグレーションのベクターカラム)。
whereVectorSimilarTo は類似度の高い順に並べます。最小類似度の指定が不要で、距離による並び順だけを明示したい場合は orderByVectorDistance を使えます。返却するカラムに距離を含めたいときは、selectVectorDistance で別名を指定できます。
pgvector 拡張を有効にしてください。
Raw式
INSERT / UPDATE / DELETE
INSERT
UPSERT(INSERT OR UPDATE)
UPDATE
DELETE
条件付きクエリ(when)
クエリ条件を動的に適用したいときはwhen() を使うと条件分岐をすっきり書けます。
デバッグ
まとめ
よく使うメソッド一覧
よく使うメソッド一覧
クエリビルダー vs Eloquent
クエリビルダー vs Eloquent
クエリビルダーはEloquentよりも低レベルで、モデルのインスタンスではなく
stdClass を返します。
リレーションやモデルイベント(オブザーバー)が不要な場合、クエリビルダーの方がシンプルで高速です。