对于一个新项目,我正在网上商店工作。我的产品与植物细节有一对多的关系。工厂详细信息具有列价。我需要以第一个细节的价格订购产品。
如果我使用连接,我会按价格订购所有产品,但我会为每个细节关系获得一个新产品。
我试过了:
$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);
}
但是我没有在分页链接中获得当前页面。有没有人有任何想法?
如果你使用这样的东西怎么办:
$products = $products->sortBy(function ($product, $key) {
return $product->plantDetails()->first()->price; })->paginate(24)
Paginate也会这样做......但我不明白你的意思是“需要按照第一个细节的价格订购产品吗?”
first()将从plantDetails返回第一个对象,first() - > price price将返回该对象的price属性。
如果您使用查询构建器中的join方法,那么您不需要使用雄辩的关系..
它可能是这样的:
$products = DB::table('products')->
join('plantDetails','key','=','key') ->sortBy('price')->paginate(24);
其中key是products和plantDetails之间的公共列。
希望能帮助到你,