【Laravel】EloquentでWhereを使う方法について



1. whereのEloquent
EloquentはLaravelのORM(Object-Relational Mapping)で、データベース操作を簡単かつ直感的に行えます。where
はEloquentでよく使われるメソッドで、条件に基づいてデータを取得したり操作したりできます。本記事では、where
のEloquentモデルを使った活用方法を解説します。
2. whereの使い方
2.1. where
Eloquentでwhere
を使う最も基本的な方法は、条件に一致するレコードを取得することです。
$articles = Article::where('title', 'Laravel Basics')->get();
Article
モデルを使用して、title
がLaravel Basics
である記事を取得します。
複数条件を指定する場合も簡単です。
$articles = Article::where('title', 'Laravel Basics')
->where('status', 'published')
->get();
これはSQLのAND
条件に相当します。
2.2. orWhere
orWhere
を使うと、OR
条件を指定できます。
$articles = Article::where('status', 'draft')
->orWhere('views', '>', 100)
->get();
この場合、status
がdraft
またはviews
が100以上のレコードを取得します。

where
だけじゃなくて、orWhere
とかも教えて!
orWhere
は条件の「または」に使う。たとえば、where('status', 'draft')->orWhere('views', '>', 100)
。
2.3. 範囲条件
2.3.1. whereBetween / orWhereBetween
指定した範囲内のレコードを取得します。
$articles = Article::whereBetween('views', [100, 500])->get();
上記は、views
が100以上500以下の記事を取得します。
orWhereBetween
を使うと、OR
条件で範囲を指定できます。
$articles = Article::where('status', 'published')
->orWhereBetween('views', [100, 500])
->get();
2.3.2. whereNotBetween / orWhereNotBetween
範囲外のレコードを取得します。
$articles = Article::whereNotBetween('views', [100, 500])->get();
2.4. IN句
whereIn
は、指定した値のリストに一致するレコードを取得します。
$articles = Article::whereIn('id', [1, 2, 3])->get();
2.4.1. whereNotIn
指定したリストに含まれないレコードを取得します。
$articles = Article::whereNotIn('id', [1, 2, 3])->get();
2.5. Nullの判別
2.5.1. whereNull
カラムがNULL
であるレコードを取得します。
$articles = Article::whereNull('deleted_at')->get();
2.5.2. whereNotNull
カラムがNULL
でないレコードを取得します。
$articles = Article::whereNotNull('published_at')->get();
2.6. カラム同士の比較
whereColumnは2つのカラムを比較します。例えば、idより、viewsの方が大きいという条件は次のように書くことができます。
$articles = Article::whereColumn('id', '<=', 'views')->get();
orWhereColumn
を使用すると、OR
条件も可能です。
2.7. カラムの範囲条件
2.7.1. whereBetweenColumns
カラムの値が他の2つのカラムの範囲内にあるかを確認します。
$articles = Article::whereBetweenColumns('views', ['min_views', 'max_views'])->get();
同様に、whereNotBetweenColumns
やorWhereBetweenColumns
も使用できます。
2.8. サブクエリwhere
サブクエリを使用すれば、別のクエリで取得した値を基準に条件を設定することが可能です。これにより、柔軟な条件設定が簡単に実現できます。
$latestArticles = Article::where('id', function ($query) {
$query->select('id')
->from('articles')
->orderBy('published_at', 'desc')
->limit(1);
})
->get();
このクエリでは、サブクエリを用いてpublished_at(公開日)が最も新しい記事のidを取得し、それに一致する記事をwhere条件で絞り込んでいます。


2.9. Where Exists
Where Exists
を使用すると、サブクエリの結果に基づいて条件を指定できます。以下は、記事に関連付けられたコメントが存在する記事を取得する例です。
$articles = Article::whereExists(function ($query) {
$query->select(DB::raw(1)) // ダミーの値を選択
->from('comments') // commentsテーブルを参照
->whereRaw('comments.article_id = articles.id'); // commentsとarticlesを関連付ける条件
})->get();