对于一个新项目,我正在网上商店工作。我的产品与植物细节有一对多的关系。工厂详细信息具有列价。我需要以第一个细节的价格订购产品。
如果我使用加入,我会按价格订购所有产品,但我会为每个细节关系获得一个新产品。
我试过了:
$products = $products->get();
$products = $products->sortBy(function ($product, $key) {
return $product->plantDetails()->first()->price; });
$products = $this->paginate($products, $perPage = 24, true);
}
$this->paginate
:
public function paginate($items, $perPage = 15, $page = null, $options = []) {
$page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
$items = $items instanceof Collection ? $items : Collection::make($items);
return new LengthAwarePaginator($items->forPage($page, $perPage), $items->count(), $perPage, $page, $options);
}
但是我没有在分页链接中获取当前页面。有没有人有任何想法?
答案 0 :(得分:0)
如果您使用类似的东西,那就太好了:
$products = $products->sortBy(function ($product, $key) {
return $product->plantDetails()->first()->price; })->paginate(24)
Paginate也会得到... 但我不明白你的意思是“需要按照第一个细节的价格订购产品吗?”
first()将从plantDetails返回第一个对象,first() - >价格将准确返回该对象的price属性。
如果您使用查询构建器中的连接方法,那么您不需要使用雄辩的关系..
它可能是这样的:
$products = DB::table('products')->
join('plantDetails','key','=','key') ->sortBy('price')->paginate(24);
其中key是products和plantDetails之间的公共列。
希望它有所帮助,