paginate merged collections(或者:如何按字符串的形式排序)

时间:2016-12-01 03:06:36

标签: php laravel collections eloquent laravel-5.3

我最初有这个搜索术语的解决方案:

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.。 有没有办法将分页功能保留在结果(已排序和合并)的集合上?

1 个答案:

答案 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);