Laravel-合并的集合与口才的集合不同吗?

时间:2019-05-28 10:13:57

标签: laravel collections merge

我在排序和返回合并的集合时遇到问题。

当我这样做时:

$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方法不存在”

那些集合与返回的单个集合不同吗?

2 个答案:

答案 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?