在 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中文网其他相关文章!