Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有求和和和分组的Laravel模型查询_Laravel - Fatal编程技术网

具有求和和和分组的Laravel模型查询

具有求和和和分组的Laravel模型查询,laravel,Laravel,我有一张这样的桌子: |item_name |uom |qty |order_number |bike |pc |1 |101 |ball |pc |2 |102 |bike |pc |5 |103 |car |pc |3 |106 |bike |pc |4 |108 |ball |pc |1 |10

我有一张这样的桌子:

|item_name  |uom    |qty    |order_number

|bike       |pc     |1      |101
|ball       |pc     |2      |102
|bike       |pc     |5      |103
|car        |pc     |3      |106
|bike       |pc     |4      |108
|ball       |pc     |1      |109
|bike       |pc     |6      |115
|car        |pc     |1      |111
Item::where('year', 2019)->whereIn('item_name', $saps)
            ->get();
我想在视图中看到这些数据:

bike - 16 pcs overall:
101 - 1
103 - 5
108 - 4
115 - 6

ball - 3 pcs overall:
102 - 2
109 - 1
等等。。。 我尝试使用此查询,但我认为它不正确,因为它只提供名称和数量总和:

$saps = Item::where('year', 2019)->groupBy('item_name')->selectRaw('item_name, sum(qty) as sum')->get('item_name','sum');
尝试此查询

$saps = Item::where('year', 2019)->selectRaw('order_number, qty')
                    ->groupBy('item_name')
                    ->get();


您可以通过以下方式获得初始组:

$saps = Item::where('year', 2019)->selectRaw("SUM(qty) as total, item_name, id")
                ->groupBy('item_name')
                ->get();
然后,您可以惰性或急切地加载每个项目的列表

如果使用延迟加载,则可以映射结果,然后根据每个项目延迟加载列表

$saps->map(function($item){
     $items = Item::where('year', 2019)->where('item_name', $item->item_name)
                ->get();
}
或者像这样的急负荷:

|item_name  |uom    |qty    |order_number

|bike       |pc     |1      |101
|ball       |pc     |2      |102
|bike       |pc     |5      |103
|car        |pc     |3      |106
|bike       |pc     |4      |108
|ball       |pc     |1      |109
|bike       |pc     |6      |115
|car        |pc     |1      |111
Item::where('year', 2019)->whereIn('item_name', $saps)
            ->get();
尝试此查询

$saps = Item::where('year', 2019)->selectRaw('order_number, qty')
                    ->groupBy('item_name')
                    ->get();
输出


因为您只选择了item_name和sum,所以您只得到这两个值。这就是SQL group by的工作方式,所以从这个意义上说它是正确的。也许你需要用这种方法来接近你想要的东西,但这是行不通的。它返回带有物料第一个订单号的数量之和name@YasinPatel我想它现在可以工作了,但不会得到想要的准确结果。