我正在尝试为&#34建议排序"推荐"在我的电子商务网站上使用orderBy
方法。这是一个简单的orderby样本:
if($params['sortby'] == 'numpricehl') $query->orderBy('price','desc');
我希望做的是通过旋转值来订购。示例:鉴于10个产品的价格为:(10,20,30,...... 100),它会像这样订购(低,中,高,低,中,高)等,这样产品就会显示出来这(10,50,100,20,60,80)
这样做最好的方法是什么?
答案 0 :(得分:0)
这是一个适用于查询结果的解决方案:
$tiers = 3;
$result = [];
$products = Product::orderBy('price')->get();
$size = ceil($products->count() / $tiers);
$split = $products->pluck('price')->chunk($size);
while(!$split[0]->isEmpty()) {
for($tier = 0; $tier < $tiers; $tier++) {
if(!$split[$tier]->isEmpty()) {
$result[] = $split[$tier]->shift();
}
}
}
可能有orderBy()
的数据库内解决方案,但我很确定它更复杂。
chunk()
部分尚不理想,因为它将10个产品拆分为4,4,2
。
您可以添加此内容以获取4,3,3
:
if($products->count() % $tiers == 1) {
$split[2]->prepend($split[1]->pop());
}