Laravel: 관련순으로 정렬된 결과로 여러 열에서 여러 키워드를 사용하여 검색
Laravel에서 다음을 기반으로 데이터를 찾는 검색 기능을 구현합니다. 여러 열에 여러 키워드를 넣는 것은 어려울 수 있으며, 특히 관련성 순서가 관련된 경우에는 더욱 그렇습니다. 이 종합 가이드는 이 문제를 자세히 다루며 구조화된 접근 방식을 따르는 솔루션을 제공합니다.
데이터베이스 구조
데이터베이스 테이블에는 두 개의 열(meta_name 및 Meta_description)이 포함됩니다. 검색 키워드가 일치합니다.
검색 기준
검색에는 특정 기준이 있어 두 열 모두에 키워드가 있는지에 따라 결과의 우선순위가 결정됩니다. 세 개의 키워드가 모두 포함된 행에 가장 높은 우선순위가 부여되고, 처음 두 개의 키워드만 포함된 행, 마지막으로 첫 번째 키워드만 포함된 행이 따릅니다.
페이지 매김
검색 결과는 페이지 매김을 사용하여 동적으로 로드되며 사용자가 페이지 하단으로 스크롤하면 새 결과가 추가됩니다.
소스 코드
다음 코드 조각은 검색합니다. 원하는 순서로 검색 결과:
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!