where文が思い通りに動かない
目次
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)
を一番最初に持ってくればいいんじゃないの!?」
と思いましたが、わかりやすくて正しい書き方はこちらのようです。
ただ動く書き方ではなく、正しい書き方ができるようにならなきゃな〜〜。
今日のアウトプットは以上です!
Author And Source
この問題について(where文が思い通りに動かない), 我々は、より多くの情報をここで見つけました https://qiita.com/watatatayu/items/c4a3d8ae70278eb95df5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .