在 Laravel 中使用 sortby 时不能使用分页

我想获取产品并mutator attribute在我的情况下对其进行排序,它被称为price


我搜索如何对其进行排序,发现我可以sortBy使用collection


像那样


private function search()

{   

    return Product::with(['firstImage', 'category'])

        ->sortBy('price');

}

它工作正常,但是当我尝试添加paginate时没有任何反应并且响应中没有分页


private function search()

{   

    return Product::with(['firstImage', 'category'])

        ->paginate(9)->sortBy('price');


}

那么在这种情况下我该如何添加paginate?


编辑


price突变体


public function getPriceAttribute()

{

    return $this->sell_price - (($this->discount * $this->sell_price) / 100);

}


青春有我
浏览 138回答 2
2回答

三国纷争

不幸的是,没有办法呼吁paginate()收集。您可以手动对收集结果进行分页或修改您的查询并使用addSelect或orderByRaw包含变异值:use Illuminate\Support\Facades\DB;Product::select('*', DB::raw('(sell_price - ((discount * sell_price) / 100)) AS price'))        ->orderBy('price')        ->paginate(9);顺便说一句,如果您的折扣是一个常数值,我认为您将得到相同的结果来按sell_price列而不是price变异值排序,所以请尝试orderBy('sell_price')代替sortBy('price'):Product::with(['firstImage', 'category'])        ->orderBy('sell_price')        ->paginate(9);Laravel 文档:https ://laravel.com/docs/master/queries#ordering-grouping-limit-and-offset

噜噜哒

您必须使用paginate(9)afterorderBy()函数。所以你必须像这样编辑第二个代码:private function search(){       return Product::with(['firstImage', 'category'])        ->orderBy('price')->paginate(9);}
打开App,查看更多内容
随时随地看视频慕课网APP