我在排序和返回合并的集合时遇到问题。
当我这样做时:
$ads = Ad::where('status',1)->where('deleted_at',NULL)->paginate(30);
有效 但是当我将其与另一个收藏集(如
)合并时$one = Ad::where('status', 1)->get();
$two = Ad::where('status', 2)->get();
$ads = $one->merge($two);
$ads->paginate(30);
它告诉我“分页方法不存在”以及“ orderBy方法不存在”
那些集合与返回的单个集合不同吗?
答案 0 :(得分:2)
这是因为您要从$one
和$two
返回一个集合,然后尝试对它们进行分页,因此您无法对集合进行分页,只能对查询构建器进行分页
现在可以从$one
返回查询构建器,并且$two
删除get()
,但是现在您可以t use
merge()on query builders, so you can use
whereIn`返回广告的状态[1,2]
像这样:
$ads= Ad::whereIn('status', [1,2])->paginate(30);
答案 1 :(得分:1)
分页仅适用于查询生成器和口才查询。
Laravel分页将MySQL查询调整为仅从该特定页面检索结果。
因为您已经有了查询结果,所以它不再可用于应用orderBy
或分页。但是,您仍然可以将集合切成页面的多个部分。
在您的情况下,由于使用相同的模型,因此最好同时检索两个结果:
$ad = Ad::where('status', 1)->orWhere('status', 2)->paginate(20);
如果使用其他模型,则可以如下所示对集合进行切片: stackoverflow - How can I paginate a merged collection in Laravel 5?