Сумма Laravel и группировка по product_id и возвращаемым данным таблицы - PullRequest
0 голосов
/ 04 ноября 2019

Табличные данные:

id || product_id || quantity || sold_price || image (Relationship)
1  ||      1     ||    10    ||     10     || 1.png
2  ||      2     ||    5     ||     20     || 2.png
3  ||      1     ||    15    ||     15     || 1.png

Ожидаемые данные возврата

Сумма повторных product_id, что составляет 25, и средняя цена продажи sold_price, которая составляет 10+15/2 = 2* 1010. *

Для получения среднего мы получаем sum/counter, как вы уже знаете.

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

id || product_id || quantity || sold_price || image (Relationship)
1  ||      1     ||    25    ||     12.5   || 1.png
2  ||      2     ||    5     ||     20     || 2.png

Что я пробовал

$products = SoldProducts::whereIn('export_invoice_id', $export_invoice_ids)
            ->groupBy(DB::raw('product_id'))
            ->select([
                'sold_price',
                DB::raw('sum(quantity) total_quantity'),
            ])
            -> get();

Но это возвращение только total_quantity и product_id без id, average_sold_price, image.

Проблема

Проблема в том, что image из отношений.

Я пытался использовать with('image'), но выбор не работает.

1 Ответ

1 голос
/ 05 ноября 2019

Если я правильно понял вопрос, следующий код должен исправить вашу проблему.

$products = SoldProducts::whereIn('export_invoice_id', $export_invoice_ids)
    ->groupBy('product_id')
    ->join('images', 'product.image_id', '=', 'images.id')
    ->select([
        'products.id',
        'products.product_id',
        DB::raw('sum(products.quantity) AS quantity'),
        DB::raw('(sum(products.sold_price) / count(*)) AS sold_price'),
        'images.image'
    ])
    ->get();

Если вы используете select, вам нужно выбрать каждый столбец, который вам требуется, в select для Eloquent, чтобы получить его,в противном случае он не потянет колонку за вас.

Вам нужно два DB :: raw на ваш выбор - один для количества и один для проданной цены согласно вашей спецификации;Количество - это простая сумма. Суммирует все элементы по идентификатору продукта. Проданная цена суммируется для начала, а затем делится на номер этого product_id.

Редактировать: Я обновил пример кода - но так как вы не указали, как изображение присоединяется к таблице, я сделал обоснованное предположение. Вам может понадобиться сделать это -> leftJoin, если вам не всегда назначено изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...