LoginSignup
0
0

More than 1 year has passed since last update.

Eloquentを使ったLIKE検索機能の作り方

Last updated at Posted at 2022-02-17

はじめに

検索結果をモデルコレクションで欲しいためクエリビルダではなくEloquentを使う必要があったのですが、調べるとクエリビルダのものしかヒットしなかったため、今回記事にします。初学者なため瑕疵や不備があると思うので、ツッコミやより良い方法があればどんどんお願いします

環境

Laravel 8.79.0
PHP 8.1.1

検索機能

PostController.php
    public function search(Request $request)
    {
        // searchが検索ワードが入力されたフォーム部品 requiredは入力必須のバリデーション項目
        $request->validate(['search' => 'required']);
        // 検索ワード取得
        $search = $request->search;
        // 全角スペースを半角に変換
        $spaceConversion = mb_convert_kana($search, 's');
        // スペースやカンマ区切りで検索ワードを配列に格納
        $wordArraySearched = preg_split('/[\s,]+/', $spaceConversion, -1, PREG_SPLIT_NO_EMPTY);
        // 一つ目の検索ワードをwhereで抽出
        $query = Post::where("title", "LIKE", "%" . $wordArraySearched[0] . "%");
        // 二つ以上検索ワードがあれば抽出
        if (count($wordArraySearched) > 1) {
            for ($i = 1; $i < count($wordArraySearched); $i++) {
                $query->Where("body", "LIKE", "%" . $wordArraySearched[$i] . "%");
            }
        }
        // 検索結果取得
        $posts = $query->get();
    }

参考

リンク内のクエリビルダによる検索機能を参考にし、一部変更しました

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