Laravel 集合对集合中的多列求和

标签 laravel laravel-5

我一直在阅读 Laravel 中的集合。目前我知道如何使用它,但是我有一个关于 sum() 的问题。功能。

根据文档,它可以像这样使用:

collect([1, 2, 3, 4, 5])->sum();

也像这样:
$collection = collect([
    ['name' => 'JavaScript: The Good Parts', 'pages' => 176],
    ['name' => 'JavaScript: The Definitive Guide', 'pages' => 1096],
]);

$collection->sum('pages');

这很好,我理解,但是现在我有一个包含嵌套对象的数组,我想知道如何在 laravel 中实现类似的功能:
$collection = collect([
    ['name' => 'JavaScript: The Good Parts', 'pages' => 176, 'price' => 100.00],
    ['name' => 'JavaScript: The Definitive Guide', 'pages' => price, 'pages' => 150.00],
]);

$collection->sum(['pages', 'prices']);

这显然会返回一个这样的数组:
[1272, 250]

或者像这样的集合/对象:
{"total_pages": 1272, "total_price": 250}

简而言之,我想知道如何对 laravel 集合中多列的结果求和并返回结果,而不是这样做两次:
$collection->sum('pages');
$collection->sum('price');

因为我认为这会导致集合上的多个循环还是我错了?

最佳答案

您需要使用 pipe方法将集合传递给回调。在回调中,您可以实现您想要做的事情。

$collection = collect([
    ['name' => 'JavaScript: The Good Parts', 'pages' => 176, 'price' => 100.00],
    ['name' => 'JavaScript: The Definitive Guide', 'pages' => 314, 'price' => 150.00]
]);

$result = $collection->pipe(function ($collection) {
  return collect([
    'total_pages' => $collection->sum('pages'),
    'total_price' => $collection->sum('price'),
  ]);
});

关于Laravel 集合对集合中的多列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52993598/

相关文章:

mysql - 如果目标位于一个表中而事件位于另一个表中,如何显示实现不同目标的进度

php - Laravel - 使用@section 动态设置元标签

php - 如何在 Laravel 的 Controller 重定向时显示成功消息?

laravel-5 - 如何将 sendgrid 电子邮件模板 ID 传递给邮件发送功能?

javascript - 添加新数据时自动刷新另一个页面 Laravel 5.8 Ajax

php - Laravel 迁移 SQLSTATE[42000] : Syntax error or access violation: 1064

php - 如何获取资源集合中的分页链接 - Laravel 5.7.19

php - 在 Laravel 5 中使用表单请求验证时如何添加自定义验证规则

mysql - 来自多个表的 LEAST 和 GREATEST 日期值,laravel 方式

php - Laravel 5 - 如何在用户注册时将行插入到多个表中