在 Laravel 中,如何将一个模型中的列按另一个模型中的列分组?

How would you aggregate a column in one model grouped by a column in another model in Laravel?

我知道这很简单,但我就是无法以 Eloquent 的方式解决这个问题。 对于这样维护产品主数据和事务 table 的简单场景:

**Table : Products**

prod_id
Prod Name
Manufacturer

**Table : Sales**

prod_id
qty_sold
selling_price

已在“产品”模型上建立关系

public function sales()

{
return $this->hasMany('\App\Models\Sale','prod_id','prod_id');
}

我如何运行 eloquent 查询产品 return 按制造商分组的销售数量(总和('qty'))?

其次,是否可以运行查询销售模型以获取按制造商分组的聚合(来自产品模型)?

基本上,我希望一个模型的聚合按另一个相关模型中的列分组。

这是一个可能的 SQL 查询(请原谅打字错误,我在移动设备上):

SELECT products.manufacturer, sum(qty_sold) 
FROM products LEFT JOIN sales on products.prod_id = sales.prod_id 
GROUP BY products.manufacturer

我会使用 DB::raw() select:

DB::table('products')
->leftJoin('sales', 'products.prod_id', '=', 'sales.prod_id')
->select(DB::raw('products.manufacturer, SUM(qty_sold)'))
->groupBy('products.manufacturer')
->get()

您也可以尝试类似的方法:

$sales = Product::select(DB::raw('products.manufacturer, SUM(qty_sold)'))
                  ->groupBy('products.manufacturer')
                  ->get();