0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravelのwhereメソッドで取得するデータの条件を絞りたいんですけどっ!??

Last updated at Posted at 2022-07-01

イントロ

以前にLaravelのEloquentを使って、モデルから全部のデータを取得する方法をご紹介しました。

全部のデータではなくて、Eloquentに条件をつけて「一部の」データを取得するにはどんな方法があるのでしょうか。

今回はそちらをご紹介したいと思います。

本記事はLaravelドキュメントのデータベース:クエリビルダを噛み砕いて説明したものになります。

今回紹介するEloquentは厳密にはクエリビルダですが、各Eloquentはクエリビルダとして機能するため、本記事では便宜上Eloquentとしてご紹介させていただきます。

whereメソッドで条件を絞る

Eloquentに条件をつけてモデルを取得するときはwhereメソッドを使いましょう。

このwhereメソッドには3つの引数が必要です。

  1. カラムの名前
  2. 演算子
  3. カラムの値と比較する値

簡単に書くと以下です。

where(カラムの名前, 演算子, カラムの値と比較する値)

例えば、usersテーブルのvotes列の値が100に等しく、age列が35より大きいユーザーを取得する方法は以下です。

use App\Models\User;
$users = User::where('votes', '=', 100)->where('age', '>', 35)->get();

whereメソッド単体は条件を絞る機能しかないので、whereメソッドで条件を絞ったら最後はgetメソッドでデータを取得するのを忘れないようにしてください。

Laravelのドキュメントではいきなり条件を2つで絞っているが、where()get()を繋げるときは->を書いて続ける。

また一般にメソッドが増えるにつれて1行で続けると長くて見えづらいことがあるので、見えやすくするために以下のように改行することも多いです。

$users = User::where('votes', '=', 100)
    ->where('age', '>', 35)
    ->get();

=の省略形

絞りたい条件が=であるときはwhereメソッドの省略形が使えて、=を書かなくてもOKです。

$users = User::where('votes', 100)->get(); // 2つ目の引数「=」を省略してもいい

whereメソッドを使った取得例

年齢が18歳以上で、性別がのユーザーを取得

$users = User::where('age', '>=', 18)->where('sex', 'male')->get(); // 「=」の省略形を使っている

ステータスが公開済みで、公開日が2022年1月1日以降の記事を取得

$articles = Article::where('status', 'published')->where('published_at', '>=', '2022-01-01')->get();

他にもwhereメソッドに似たメソッドがたくさんあるよ

Laravelは非常に便利で多くのメソッドを用意しています。

「または」という条件を付与できるorWhereメソッドや、2つの値の間にある条件を加えるwhereBetweenメソッド、値がNULLの条件を加えるwhereNullメソッドなど、たくさんあります。

これらwhereの派生的なメソッドはこちらLaravelのドキュメントを見てみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?