在 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 语法