这是我用的
{{ $products->appends(request()->except('page'))->links() }}
字符串
这是我的控制器
if ($request->get('sort') == 'sort-price_asc') {
$products = Product::whereIn('id', $product_ids)->published()->paginate(12);
$products = $products->sortBy(function ($prod) {
return ceil(($prod->packs->count() > 0 ? $prod->packs->sortBy('pivot.add_time')->first()->volume : 1) * $prod->price);
});
}
型
但是为什么我会得到一个错误
Method Illuminate\Database\Eloquent\Collection::appends does not exist.
型
2条答案
按热度按时间bsxbgnwa1#
方法
appends()
来自Paginated集合。通过使用sortBy()
,您将其转换为一个简单的Eloquent Collection,它不再具有该方法。在调用
->paginate()
之前,您应该尝试对记录进行排序。我看到这个顺序非常复杂,所以你可以尝试使用原始查询。55ooxyrt2#
出现错误“Method Illuminate\Database\Eloquent\Collection::appends does not exist”,因为您试图对集合($products)而不是Paginator类的示例使用appends方法。appends方法用于将查询参数添加到分页链接中,它在Paginator示例上可用,而在常规集合上不可用。
在代码中,首先使用paginate方法获取产品,该方法返回Paginator类的示例。但是,在下一个代码块中,您将通过使用sortBy方法对集合进行排序来覆盖$products变量,该方法将返回一个新的集合。由于新集合不是Paginator示例,因此appends方法不可用。
若要解决此问题,您应该在对数据进行分页之前对Paginator示例本身执行排序操作。可以使用orderBy方法直接从数据库查询中对数据进行排序。以下是如何修改代码:
字符串
}