在 Laravel Eloquent 中求和并返回页面

Posted

技术标签:

【中文标题】在 Laravel Eloquent 中求和并返回页面【英文标题】:Sum in Laravel Eloquent and Return on Page 【发布时间】:2019-09-11 08:10:35 【问题描述】:

我正在尝试使用以下雄辩的查询来获取该位置的库存值。除了返回 null 的库存值之外,它会正确提取所有内容(位置名称、地址、用户数等)。我首先在 SQL 中构建了这个查询,效果很好,但无论出于何种原因,它在 eloquent 中都不起作用。这是完全相同的查询。

$locations = \App\Models\Location::select(DB::raw('locations.*', 'SUM(inventory.part_price * inventory.quantity) AS inventory_value'))
            ->leftJoin('inventory', 'locations.id', '=', 'inventory.location_id')
            ->where('locations.company_id', '=', Auth::user()->company_id)
            ->groupBy('locations.id')
            ->get();

在刀片文件上,我使用了@foreach 循环。我尝试使用返回 null 的$location->inventory_value。我试图在控制器中转储该特定变量,它在那里也为空。刀片文件如下所示:

它应该返回以下所有的库存值:

最终我的问题是如何修复此查询以获取要显示在刀片​​文件上的库存价格和数量的总和?谢谢!

【问题讨论】:

我无法在刀片文件中显示 inventory_value。它甚至在碰到刀片文件之前也会在控制器中返回 null。 (请参阅图片上的空单元格和我刚刚添加的其他图片)。 【参考方案1】:

当使用DB::raw 时,将所有列作为第一个参数(在同一个引号内)传递,例如:

DB::raw('locations.*, SUM(inventory.part_price * inventory.quantity) AS inventory_value')

您还可以使用selectRaw 使其看起来更干净,例如:

use App\Models\Location;

$locations = Location::selectRaw('locations.*, SUM(inventory.part_price * inventory.quantity) AS inventory_value')->leftJoin...

【讨论】:

天哪,我花了好几天的时间才回到这个问题上,希望能找出一些复杂的答案。似乎总是很简单的事情!这解决了我的问题,非常感谢!我会接受你的回答。 @JustinHammond 没问题,把答案再扩展一点。

以上是关于在 Laravel Eloquent 中求和并返回页面的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Eloquent 多重求和

遍历数组集合并返回命名键值对(Laravel/Eloquent)

Laravel Eloquent发现并返回两种不同的类型?

我需要知道用于查询嵌套关系并返回结果的 Laravel Eloquent 语法

Laravel - 在 Eloquent 模型中返回自定义额外数据

在 Laravel 中,哪些 Eloquent 方法返回数据,哪些返回对象?