在Laravel 中針對具有有序相關性的多個列搜尋多個關鍵字
針對多個資料庫列實作涉及多個關鍵字的搜尋功能可能具有挑戰性,尤其是當需要根據相關性對結果進行排序時。在 Laravel 中,有許多方法可以解決這個問題。
使用資料庫查詢的方法
解決該問題的一種方法是建立多個資料庫查詢來檢索結果特定標準。這是一個可能的實現:
$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')); $posts = $all->union($twoWords)->union($oneWord)->get();
此方法根據所有三個關鍵字的存在、僅前兩個關鍵字、然後僅第一個關鍵字來過濾結果。最後,它使用聯合運算子組合結果。
分頁的其他注意事項
要實現滾動載入功能,您可以合併 JavaScript 和 AJAX 請求。當使用者捲動到頁面底部時,可以傳送 AJAX 請求來檢索下一組結果。查詢產生器中的skip()和take()方法可用來指定要擷取的記錄的偏移量和限制。
// Retrieve the specified number of results after the last loaded result $start = $request->get('start');//how many results have already been shown $records = Post::select('*') ->skip($start) ->take($this->rowperpage) // $this->rowperpage= 4 e.g. ->get();
請記得處理沒有更多可捲動結果的情況。
以上是如何在 Laravel 中實現跨多列的有序相關性搜尋?的詳細內容。更多資訊請關注PHP中文網其他相關文章!