Так что в основном я должен суммировать и перечислять все продукты на основе их названия, они должны отличатьсяЭто будет работать правильно, если я выберу только $ [].элемент из таблицы, но если бы я выбрал все элементы с $ [].Я получу следующее
ROW:
[{"brand_name": "Product 1", "brand_id": "4", "quantity": 1}, {"brand_name": "Product 2", "brand_id": "5", "quantity": 3}]
РЕЗУЛЬТАТ:
{
"brand_id": "[\"4\", \"5\"]",
"brand_name": "[\"Product 1\", \"Product 2\"]",
"quantity": 0
}
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:
{
"brand_id": "4",
"brand_name": "Product 1",
"quantity": 1
}
{
"brand_id": "5",
"brand_name": "Product 2",
"quantity": 3
}
QUERY ELOQUENT:
public function scopegetBasicMeans($query)
{
$query->where('type', 1)
->join('report_asset', 'report_asset.report_id', '=', 'reports.id')->select(
DB::raw('JSON_UNQUOTE(JSON_EXTRACT(resources, "$[*].name")) as brand_name'),
DB::raw('JSON_UNQUOTE(JSON_EXTRACT(resources, "$[*].brand_id")) as brand_id'),
DB::raw('SUM(JSON_EXTRACT(resources, "$[*].quantity")) as quantity')
)->orderBy('quantity', 'DESC')
->groupBy(DB::raw('JSON_EXTRACT(resources, "$[*].name")'));
}
QUERY RAW:
select JSON_UNQUOTE(JSON_EXTRACT(resources, "$[*].name")) as brand_name, JSON_UNQUOTE(JSON_EXTRACT(resources, "$[*].brand_id")) as brand_id, SUM(JSON_EXTRACT(resources, "$[*].quantity")) as quantity, `reports`.`created_at`, `commercialist_id`, `type` from `reports` inner join `report_asset` on `report_asset`.`report_id` = `reports`.`id` where `reports`.`object_id` = ? and `reports`.`object_id` is not null and `type` = ? and `reports`.`deleted_at` is null group by JSON_EXTRACT(resources, "$[*].name") order by `quantity` desc
По сути, я должен суммировать качество всех предметов с определенным именем и сгруппировать их по имени, что даст мне уникальные результаты.Это сработало бы, если бы я выбрал только первый элемент из таблицы, например: $ [0] .name [0], но не для нескольких.Есть предложения?
структура