到目前为止,这是我所做的。
DB::table('products')
->leftjoin('inventories', 'inventories.product_id', 'products.id')
})
->leftjoin('order_items as purchase_oi', function($query){
$query->on('purchase_oi.inventory_id', 'inventories.id');
$query->on('purchase_oi.status','!=', \DB::raw('"cancelled"'));
})
->select(DB::raw('sum(inventories.quantity)as qty'),
DB::raw('count(purchase_oi.inventory_id) as purchases'),
'products.id as pid', 'products.*')
->where('products.is_deleted', 0)
->where('inventories.is_deleted',0)
->groupBy('inventories.product_id')
->get();
order_items表包含以下状态:
enum('shipped','return''cancelled');
此问题在与order_items表联接上。目前,我只是获得不等于已取消的数据,但我想获得返回的order_items数据和已取消的order_items数据。
即让我从order_items表中进行购买,取消和退货计数。
预期输出为:
0=>purchases = 4,
returns = 10,
cancelled = 2
最佳答案
我认为问题是您的groupBy()
。如果您有以下查询:
SELECT COUNT(*) AS count FROM table GROUP BY id
你不会以
+-------+
| count |
+-------+
| 5 |
+-------+
相反,您最终得到:
+-------+
| count |
+-------+
| 1 |
+-------+
| 1 |
+-------+
| 1 |
+-------+
| 1 |
+-------+
| 1 |
+-------+
每个分组中所有项目的计数。
尝试这个:
\DB::enableQueryLog();
\DB::flushQueryLog();
//Execute your query
$queries = /DB::getQueryLog();
/DB::disableQueryLog();
/DB::flushQueryLog();
$queries = collect($queries)->map(function (array $query) {
return array_only($query, ['query', 'bindings']);
})->toArray();
dd($queries);
这应该告诉您正在执行什么SQL。