Laravel: 関連性順の結果で複数の列にわたる複数のキーワードを使用した検索
Laravel では、以下に基づいてデータを検索する検索関数を実装します。複数の列に複数のキーワードを含めるのは、特に関連性の順序が関係する場合に困難になる可能性があります。この包括的なガイドでは、この問題を詳細に取り上げ、構造化されたアプローチに従った解決策を提供します。
データベース構造
データベース テーブルには、meta_name と meta_description という 2 つの列が含まれます。検索キーワードが一致します。
検索基準
検索には特定の基準があり、両方の列のキーワードの存在に基づいて結果に優先順位が付けられます。 3 つのキーワードをすべて含む行が最も優先され、次に最初の 2 つのキーワードのみが含まれる行、最後に最初のキーワードのみが含まれる行になります。
ページネーション
検索結果はページネーションを使用して動的に読み込まれ、ユーザーがページの一番下までスクロールすると新しい結果が追加されます。
ソース コード
次のコード スニペットは、次のコードを取得します。検索結果を希望の順序で表示します:
<code class="php">$word1 = 'word1'; $word2 = 'word2'; $word3 = 'word3'; $all = DB::table('posts') ->where('meta_name', 'like', "%{$word1}%") ->where('meta_name', 'like', "%{$word2}%") ->where('meta_name', 'like', "%{$word3}%") ->orWhere(function($query) use ($word1, $word2, $word3) { $query->where('meta_description', 'like', "%{$word1}%") ->where('meta_description', 'like', "%{$word2}%") ->where('meta_description', 'like', "%{$word3}%"); }); $twoWords = DB::table('posts') ->where('meta_name', 'like', "%{$word1}%") ->where('meta_name', 'like', "%{$word2}%") ->orWhere(function($query) use ($word1, $word2) { $query->where('meta_description', 'like', "%{$word1}%") ->where('meta_description', 'like', "%{$word2}%"); }) ->whereNotIn('id', $all->pluck('id')); $oneWord = DB::table('posts') ->where('meta_name', 'like', "%{$word1}%") ->orWhere('meta_description', 'like', "%{$word1}%") ->whereNotIn('id', $all->pluck('id')) ->whereNotIn('id', $twoWords->pluck('id'));</code>
最終クエリ
結果を結合するには、unionAll メソッドを使用します:
<code class="php">$posts = $all->unionAll($twoWords)->unionAll($oneWord)->get(); // check this first # or $posts = $all->unionAll($twoWords)->unionAll($oneWord)->skip($start)->take($this->rowperpage)->get();</code>
このコードは、関連性を優先して、指定された順序で結果を取得します。 Skip() メソッドと take() メソッドはページネーションに使用されます。$start はすでに表示されている結果の数を表します。最後に、get() メソッドはレコードを取得します。
以上が複数のキーワードで複数の列を検索するときに関連性を優先する検索機能をLaravelに実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。