我有一个名为transaction的表(型号:交易)。下面是我的表结构:
| 数量| Quantity |
| --| ------------ |
| + | 10 |
| - | 4 |
| + | 15 |
| - | 15 |
这里我想要总量的和,其中所有的-
应该被减去,所有的+
应该被添加。我怎么能得到?
我已经添加了所有的+
(这是购买)和减去-
(这是销售),使用2种不同的查询方式:Transation::sum('Quantity')->where('Type','+') - Transation::sum('Quantity')->where('Type','-')
。
有没有比多个查询更好的单一查询?
4条答案
按热度按时间gupuwyp21#
您可以使用
selectRaw
直接对查询执行计算,并执行sql语法。或者将表按
Type
分组,然后在laravel集合中执行计算yhuiod9q2#
这可以通过使用雄辩模型访问数据来完成。然后,您可以通过访问属性并基于此进行操作来遍历每个属性并检查值。
关于使用
Model::all()
的注意事项,如果你有很多元素,你应该使用chunk
。all()
会将所有数据加载到内存中,过多的条目可能会超过内存。你可以在这里阅读更多:Select all from table with Laravel and Eloquent3duebb1j3#
是的,你可以,你使用Laravel雄辩地选择原始,这将允许你使用case就像switch语句一样,这是一个例子
$totalQuantity = DB::select(DB::raw('SELECT SUM(CASE WHEN Type = \'+\' THEN Quantity ELSE -Quantity END) AS total_quantity FROM transactions'))[0]->total_quantity;
eqqqjvef4#
尝试在MySQL中使用Laravel的
selectRaw
进行计算