是否可以通过关系对选择的结果进行排序

时间:2019-01-26 03:00:14

标签: laravel eloquent

是否可以通过关系对选择结果进行排序?

我有一对多的关系。一个产品有多个项目。并且每个项目都有一个价格。我需要提取产品,但是产品订购必须符合商品价格

让我给你举个例子:

Product::with(['items'])->whereHas('items', function ($query) {

    $query->orderBy('price', 'desc')

})->get();

就是这样。但是我需要按照商品内的价格对商品进行排序。

如果我的数据库具有以下内容:

product 1
  item $ 1.2
  item $ 2.0

product 2
  item $ 3.0
  item $ 0.5

product 3
  item 1.0

我需要退货:

product 2
  item $ 3.0
  item $ 0.5

product 3
  item 1.0

product 1
  item $ 1.2
  item $ 2.0

因为它被认为是每种产品的最低价商品。我该如何使用口才好呢?

2 个答案:

答案 0 :(得分:0)

您可以在查询中尝试此操作吗?

Product::withCount(['items as ItemTotalAmount' => function($q){
        $q->select(DB::raw("SUM(price)"));
}])
->with('items')
->orderBy('ItemTotalAmount', 'ASC')->get();

在此查询中,它首先对商品价格求和,然后将合计放入别名ItemTotalAmount

然后,我在orderBy中使用ItemTotalAmount对商品价格总计更高的产品进行了排序。

答案 1 :(得分:0)

Number1=bzcat $LOGDIR/$LOG_FORMAT | grep "<number>[0-2,4-9][0-2,4-9][0-2,4-9][0-2,4-9][0-2,4-9][0-2,4-9][0-2,4-9]" 通常用于查询具有附加whereHas条件的关系存在。来自documentation

  

如果您需要更多电源,则可以使用whereHas和orWhereHas   在您的查询中放置“ where”条件的方法。这些方法   允许您将自定义约束添加到关系约束。

在您的特定情况下,您只想订购热切的关系。因此,下面的方法应该可以解决问题。

where()