Laravel Order Eloquent by relation

时间:2017-12-20 13:13:45

标签: laravel eloquent

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

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

我试过了:

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

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

1 个答案:

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

希望它有所帮助,