我最初有这个搜索术语的解决方案:
Post::where('title', 'LIKE', '%'.$searched.'%')->orWhere('content', 'LIKE', '%'.$searched.'%')->paginate(100);
我希望包含标题中的术语的记录位于碰撞之上
很明显:
$posts1 = Post::where('title', 'LIKE', '%'.$searched.'%')->paginate(100);
$posts2 = Post::where('content', 'LIKE', '%'.$searched.'%')->paginate(100);
$object = $posts1->merge($posts2);
$object
集合无法分页。我收到错误Method hasPages does not exist.
。
有没有办法将分页功能保留在结果(已排序和合并)的集合上?
答案 0 :(得分:0)
为什么不使用
->orderByRaw()
他们使用
'(case when title LIKE "%'.$searched.'%" then 1 else 2 end) ASC'
因此,名称中包含$searched
的人将位于顶部
所以你的查询构建器就像这样
Post::where('title', 'LIKE', '%'.$searched.'%')
->orWhere('content', 'LIKE', '%'.$searched.'%')
->orderByRaw('(case when title LIKE "%'.$searched.'%" then 1 else 2 end) ASC')
->paginate(100);