#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. Понял. Первая публикация! Еще раз спасибо.