Я пытаюсь выполнить суммирование по ключу коллекции и, похоже, не могу в этом разобраться

#laravel #sum #sql-order-by

#laravel #сумма #sql-order-by

Вопрос:

У меня есть почти полная система в Laravel 5.4, но у меня возникают трудности с использованием sum для ключа в коллекции.

Я попробовал серию собственных фрагментов кода, а также множество вводящих в заблуждение кодов на форумах (ну, по моему опыту).

Вот коллекция:

 Collection {#263 ▼
  #items: array:3 [▼
    5 => Collection {#224 ▼
      #items: array:10 [▼
        0 => {#213 ▼
           "id": 1
           "portfolio_id": 5
           "type": "Secured Note"
           "date": "2018-11-18"
           "inv_amount": "300000"
           "return_rate": "10%"
           "payment_amount": "7500"
           "inv_term": "18 Months"
           "payment_schedule": "Monthly"
           "account_info": "US BANK 4532"
           "pdffiles": null
           "created_at": "2019-04-19 01:51:53"
           "updated_at": "2019-04-19 11:53:03"
           "user_id": 1
           "hide": null
           "contract": null
           "reports": null
           "taxdocs": null
        }
        1 => {#252 ▶}
        2 => {#253 ▶}
        3 => {#254 ▶}
        4 => {#255 ▶}
        5 => {#256 ▶}
        6 => {#257 ▶}
        7 => {#258 ▶}
        8 => {#259 ▶}
        9 => {#260 ▶}
      ]
    }
    6 => Collection {#261 ▼
      #items: array:1 [▼
        0 => {#218 ▼
           "id": 2
           "portfolio_id": 6
           "type": "Secured Note"
           "date": "2018-09-15"
           "inv_amount": "350000"
           "return_rate": "12%"
           "payment_amount": "7500"
           "inv_term": "24 Months"
           "payment_schedule": "Monthly"
           "account_info": "US BANK 4532"
           "pdffiles": null
           "created_at": "2019-04-19 01:53:46"
           "updated_at": "2019-04-19 03:14:03"
           "user_id": 1
           "hide": null
           "contract": null
           "reports": null
           "taxdocs": null
        }
      ]
    }
    7 => Collection {#262 ▼
      #items: array:1 [▼
        0 => {#238 ▼
           "id": 3
           "portfolio_id": 7
           "type": "Secured Note"
           "date": "2018-06-11"
           "inv_amount": "380000"
           "return_rate": "15%"
           "payment_amount": "8900"
           "inv_term": "36 Months"
           "payment_schedule": "Monthly"
           "account_info": "US BANK 4532"
           "pdffiles": null
           "created_at": "2019-04-19 01:54:45"
           "updated_at": "2019-04-24 00:38:21"
           "user_id": 1
           "hide": null
           "contract": null
           "reports": null
           "taxdocs": null
        }
      ]
    }
  ]
  

Вот что генерирует это в контроллере:

 $grouped = DB::table('funds')
    ->get()
    ->groupBy('portfolio_id');
dd($grouped);
  

Модель фонда принадлежит портфелю, а в модели портфеля много средств.

Из коллекции у меня есть 3 портфолио. Я пытаюсь вычислить сумму, которую payment_amount платит за каждый из 3, сгенерированных из groupBy.

Помогите!

Ответ №1:

Вам следует использовать groupBy() перед get() . Также вам нужно использовать SUM для выбора.

 $grouped = DB::table('funds')
    ->select(DB::raw("portfolio_id, SUM(payment_amount)"))
    ->groupBy('portfolio_id')
    ->get();
dd($grouped);
  

Пожалуйста, также взгляните на https://laravel.com/docs/5.8/queries#aggregates

Комментарии:

1. Я также буду более тщательным с документацией.

2. Я сделал, но получил это сообщение: Спасибо за отзыв! Голоса, поданные теми, у кого репутация менее 15, записываются, но не меняют публично отображаемую оценку публикации.

3. Понял. Первая публикация! Еще раз спасибо.