通过在laravel中旋转值来命令

时间:2018-04-20 17:19:01

标签: sql laravel laravel-5 laravel-5.2

我正在尝试为&#34建议排序"推荐"在我的电子商务网站上使用orderBy方法。这是一个简单的orderby样本:

if($params['sortby'] == 'numpricehl') $query->orderBy('price','desc');

我希望做的是通过旋转值来订购。示例:鉴于10个产品的价格为:(10,20,30,...... 100),它会像这样订购(低,中,高,低,中,高)等,这样产品就会显示出来这(10,50,100,20,60,80)

这样做最好的方法是什么?

1 个答案:

答案 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());
}