Laravel总数量和按product_id分组并返回表数据

表格数据:

id || product_id || quantity || sold_price || image (Relationship)
1  ||      1     ||    10    ||     10     || 1.png
2  ||      2     ||    5     ||     20     || 2.png
3  ||      1     ||    15    ||     15     || 1.png

期望的返回数据

重复的product_id25的平均售价为sold_price

要获得平均值,我们将得到10+15/2 = 2

预期结果

sum/counter

我尝试过的

id || product_id || quantity || sold_price || image (Relationship)
1  ||      1     ||    25    ||     12.5   || 1.png
2  ||      2     ||    5     ||     20     || 2.png

但是这只返回$products = SoldProducts::whereIn('export_invoice_id',$export_invoice_ids) ->groupBy(DB::raw('product_id')) ->select([ 'sold_price',DB::raw('sum(quantity) total_quantity'),]) -> get(); total_quantity,而没有product_id

问题

问题是id,average_sold_price,image来自某个关系。

我尝试使用image,但是选择不起作用。

beibeiji 回答:Laravel总数量和按product_id分组并返回表数据

如果我已正确理解问题,则以下代码应可解决您的问题。

$products = SoldProducts::whereIn('export_invoice_id',$export_invoice_ids)
    ->groupBy('product_id')
    ->join('images','product.image_id','=','images.id')
    ->select([
        'products.id','products.product_id',DB::raw('sum(products.quantity) AS quantity'),DB::raw('(sum(products.sold_price) / count(*)) AS sold_price'),'images.image'
    ])
    ->get();

如果使用select,则需要选择Eloquent中select所需的每一列来检索它,否则,它不会为您拉出该列。

根据您的要求,您需要选择两个DB :: raw-一个代表数量,一个代表售价。数量是一个简单的总和。汇总每个产品ID的所有项目。首先将销售价格相加,然后除以该product_id的数量。

编辑:我已经更新了代码示例-但由于您尚未指定图像如何连接到表,因此我进行了有根据的猜测。如果您不总是分配图像,则可能需要使其-> leftJoin。

本文链接:https://www.f2er.com/3164193.html

大家都在问