Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对合并的集合进行分页(或:如何按字符串的存在进行排序)_Php_Laravel_Collections_Eloquent_Laravel 5.3 - Fatal编程技术网

Php 对合并的集合进行分页(或:如何按字符串的存在进行排序)

Php 对合并的集合进行分页(或:如何按字符串的存在进行排序),php,laravel,collections,eloquent,laravel-5.3,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

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

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
集合进行分页。我得到错误
方法hasPages不存在。
。 有没有办法在生成的(已排序和合并的)集合上保留分页功能?

为什么不使用

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

为什么不改用
union
?只需合并这两个select查询相同的错误:
方法hasPages不存在。
当您使用
union
时会发生该错误?不,抱歉,已粘贴。当使用您的解决方案时,我得到
SQLSTATE[21000]:基数冲突:1222使用的SELECT语句有不同的列数(SQL:(选择count(*)作为聚合自
posts`where
content
LIKE%konf%)联合(SELECT*from
posts
title
LIKE%konf%)`您可以截屏(显示)更新的代码。此外,当您使用联合查询时,它必须在其上指定相同数量的列。您的答案似乎非常有希望,但我不知道如何修复语法。如果我使用您的代码,我会在“order子句”中得到
列未找到:1054未知列“(当名称像“%konf%”那么1 else 2)”
这给了我语法错误:
->orderByRaw(“当标题像%konf%那么1 else 2 END ASC时的情况”)
有任何提示吗?(注意:为了简化调试,我硬写了搜索词。)错误显示:
语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,了解正确的语法…
@Peter ops我忘了在orderByRaw的开头添加“case”。在末尾加上“end”,我自己纠正了。我仍然有语法错误。我不知道出了什么事。@Peter出了什么错?我测试了这个查询生成器,它没有生成任何错误