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_id
和25
的平均售价为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
,但是选择不起作用。
答案 0 :(得分:1)
如果我已正确理解问题,则以下代码应可解决您的问题。
$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。