我需要一个Eloquent查询来检索我的数据库中购买最多的产品。表格为products
,products_purchases
,purchases
。产品和购买都有多对多的关系。
数据透视表products_purchases
有一个名为quantity
的数据透视字段,其中包含购买时购买的产品总数。
我试图得到这样的记录:
$data['most_purchased'] = Products::whereHas('purchases', function($query){
$query->selectRaw('SUM(products_purchases.quantity) AS qty')->orderBy('qty', 'desc')->groupBy('product_id');
})->get();
但它没有给出准确的数值,这样做的正确方法是什么?
答案 0 :(得分:0)
此代码有效:
Products::join('products_purchases', 'product.id','=','products_purchases.product_id')
->selectRaw('product.*, SUM(products_purchases.quantity) AS qty')
->groupBy('product.id')
->orderBy('qty', 'desc')
->get();
但是,如果不使用join
,还有其他“更清洁”的方法吗?
答案 1 :(得分:0)
检索最顶级产品的一种解决方案,如果您可以使用两个查询:
1)检索最顶级产品的ID。这将从数据库中选择一个标量值。
$productId = DB::table('products_purchases')
->groupBy('product_id')
->orderBy(DB::raw('SUM(quantity)'), 'desc')
->value('product_id');
2)检索产品
Product::find($productId);
未经测试,但这个想法成立了。