Laravel-随机合并和分页集合

时间:2019-06-14 14:20:54

标签: laravel collections eloquent paginator

我正在努力解决一件非常困难的事情,希望您能帮助我。 现在我有以下内容:

$ads = Ad::where('status', 1)
    ->whereIn('ad_type', [1, 2, 3])
    ->where('expire_at', '>', date('Y-m-d H:i:s'))
    ->where('special_ad', 'standard_ad')
    ->orderByRaw(DB::raw("FIELD(ad_type,2,3,1)"));

信息: 之所以有效,是因为它是一个雄辩的收藏集,我可以对它进行分页(需要我的Infinite Scroll)

但是现在我想改组ad_types本身,意思是: 假设ad_type 1可能有30个条目。它们都将按照通常的顺序退回。每次运行此查询时,我都希望将这30个命令改组。 我考虑过-> toArray();但是再说一次,没有分页(分页仅适用于口才查询,对吗?)

然后我想,嘿,让我们合并一下。 但是,一旦我这样做,返回的集合就不再是Eloquent集合,而是支持集合(对吗?我不是100%确信它是支持集合),因此分页不再起作用。

我读过很多文章来解决这个问题,并且发现一种解决方案可能是“创建自己的分页程序实例” 但是,我还不够好。即使在研究了laravel文档之后,我真的也不知道如何创建自己的分页器。

您可能需要的重要信息: 使用Laravel 5.2 $ads是动态的,这意味着视情况而定,使用Ajax发送的请求,查询在以后可能有所不同(可能会包含某些内容)。

非常感谢您阅读本文,希望您能通过解决此特定问题为我和未来的读者提供帮助。

问候,祝大家周末愉快。

1 个答案:

答案 0 :(得分:1)

首先要注意: 分页不仅适用于数据库查询。您可以使用df1 <- data.frame(x=rep(seq(0,10,by=.1),each=101), y=rep(seq(10,20,by=.1),times=101)) df1$z <- ((.1*df1$x^2+df1$y)-10)/20 library("ggplot2") ggplot(mapping=aes(x=x,y=y,size=5,color=z),data=df1)+ geom_point(size = 16, shape = 15) ggplot(df1, aes(x, y, fill="blue",alpha = z)) + geom_tile() 手动进行分页,但此处是关键词。 查询构建器(不是Eloquent)可以使用LengthAwarePaginator为您自动完成此操作。

您可以通过类似的操作“洗牌”

paginate

这将首先按ad_type字段排序,然后按随机数(每行不同)进行排序。