Laravel - 从不同的表中获取总和并计算

Posted

技术标签:

【中文标题】Laravel - 从不同的表中获取总和并计算【英文标题】:Laravel - Get sum from different table and calculate 【发布时间】:2021-10-19 02:45:09 【问题描述】:

我是 laravel 的新手,我需要这方面的帮助。所以我有 3 个不同的表,如下所示。我必须根据两个表中的不同值来计算项目的数量。首先,我必须得到值表 1 和表 2 的总和,并按项目对其进行分组。之后减去结果并按数量列显示在我的刀片中的项目表中

物品表

|ID | Item    | quantity    |
+---+---------+-------------+
|1  | item1   |             |
|2  | item2   |             |
|3  | item3   |             | 
|4  | item4   |             |

Value1 表

|ID | Item    | value       |
+---+---------+-------------+
|1  | item1   |   4757.34   |
|2  | item1   |   938.00    |
|3  | item1   |   0.00      | 
|4  | item2   |   6574.3    |
|5  | item2   |   74.40     |

Value2 表

|ID | Item    | value       |
+---+---------+-------------+
|1  | item1   |   27.64     |
|2  | item1   |   0.00      |
|3  | item1   |   2.00      | 
|4  | item2   |   64.34     |
|5  | item2   |   4.40      |

这是我到目前为止所做的

我的口才

public function getValue1()

    $query = Value1::select(DB::raw("SUM(value) as value1"))
                ->groupBy('item')
                ->get(); 
                
    return $query;


public function getValue2()

    $query = Value2::select(DB::raw("SUM(value) as value2"))
                ->groupBy('item')
                ->get(); 
                
    return $query;

我的控制器

$value1 = $myEloquentRepo->getValue1();
$value2 = $myEloquentRepo->getValue2();

$quantity = $value1 - $value2;

但似乎我没有正确执行此操作,因为我收到了一个错误 Illuminate\Database\Eloquent\Collection 类的对象无法转换为数字。任何指南将不胜感激。

【问题讨论】:

【参考方案1】:

使用纯 SQL 更容易做到这一点。服务器会更快,因为对数据库的请求会少 3 倍。

$query = "INSERT into ItemTable
SELECT t1.item, (t1.qty - t2.qty) as 'quantity'
from (
  select Item, sum(value) 'qty'
  from table1
  group by Item
) t1
join  (
  select Item, sum(value) 'qty'
  from table2
  group by Item
) t2 on t1.Item = t2.Item
";
DB::uprepared($query);

SELECT 查询本身将返回您需要的结果。然后根据您的 ItemTable 是空的还是已填充的,您插入或更新它。

【讨论】:

嗨,谢谢你,但我只需要在刀片视图表中显示数量,而不是将其插入我的 sql 表中。

以上是关于Laravel - 从不同的表中获取总和并计算的主要内容,如果未能解决你的问题,请参考以下文章

复合求和:我想创建一个复合查询,它从两个不同的表中获取两列的单独总和,然后对它们求和

从具有不同条件的表中选择总和和平均值

如何从不同的表中获取 customer_id 并在 laravel 中使用正确的方法避免重复?

如何从 laravel 框架中的模型中的表中获取数据并直接在视图中使用?

从 laravel 的不同表中获取每个 id 的总数

Laravel 查询生成器;用总和获得不同的行