Laravel Order Eloquent by relation

问题描述 投票:0回答:1

对于一个新项目,我正在网上商店工作。我的产品与植物细节有一对多的关系。工厂详细信息具有列价。我需要以第一个细节的价格订购产品。

如果我使用连接,我会按价格订购所有产品,但我会为每个细节关系获得一个新产品。

我试过了:

$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); 
}

但是我没有在分页链接中获得当前页面。有没有人有任何想法?

laravel eloquent
1个回答
0
投票

如果你使用这样的东西怎么办:

$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之间的公共列。

希望能帮助到你,

© www.soinside.com 2019 - 2024. All rights reserved.