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.

where文が思い通りに動かない

Last updated at Posted at 2022-03-27

目次

1.where文のちょっとした違い
2.大前提条件

Laravelの勉強で少し躓いた部分があったのでアウトプットします。

1. where文のちょっとした違い

ブログサイトの、ブログ検索機能を作るにあたり、
「公開中の記事の中から、タイトルか本文が検索ワードと一致した記事だけを表示する」
という where文 を書きました。

$posts = Post::where('title', 'like', "% {{$request->search_word}} %")
->orWhere('content', 'like', "% {{$request->search_word}} %")
->where('is_published', 1)
->get();

しかしこれだと思い通りの動きをしてくれず、非公開中の記事まで表示されてしまいました。
->where('is_published', 1)この部分が反応していないのです。

2. 大前提条件

色々調べた結果、上記の書き方は
「タイトルが検索ワードと一致する記事、
 もしくは本文が検索ワードと一致する記事か公開中の記事。」

という風になっていました。
簡単に言うと、A or ( B && C ) ということです。

ただ、実装したいのは、A && ( B or C ) なので、

$posts = Post::where('is_published' ,1)
->where(function($query){
 $query->where('title', 'like', "% {{$request->search_word}} %")
 ->orWhere('content', 'like', "% {{$request->search_word}} %")
})->get();

こうするのが正解です。

where('is_published' ,1) を大前提条件として、その中で条件に合った記事を取得するということです。

ただ正直、
「最初の書き方のまま ->where('is_published', 1) を一番最初に持ってくればいいんじゃないの!?」
と思いましたが、わかりやすくて正しい書き方はこちらのようです。
ただ動く書き方ではなく、正しい書き方ができるようにならなきゃな〜〜。
今日のアウトプットは以上です!

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?