У меня есть модель под названием «Покупки», которая имеет отношение «многие ко многим» с моделью продукта. Я создал модель для управления таблицей в отношении «многие ко многим» под названием PurchasedProduct. Эта модель связана с другой моделью под названием «Валюта».

Таблица покупок : Id, number, created_at, updated_at.
Таблица_продукта : идентификатор, описание, created_at, updated_at.
Таблица валют : идентификатор, код, название, соотношение.
Таблица Product_Purchase : идентификатор, покупка_id, product_id, currency_id, количество, цена.

User может купить несколько Products, тогда он может заплатить многими Currencies. Чтобы управлять каждой транзакцией, я хочу суммировать общую сумму (количество * цена) по валютам. Я пытался сделать это с помощью аксессуара, но все, что я могу сделать, это суммировать произведение количества * цены без учета валюты.

public function getTotalAttribute($value)
{
    $transformers = $this->transformers();
    return $transformers->sum(\DB::raw('quantity * price'));
}`
0
Golinmarq 14 Окт 2018 в 16:38

1 ответ

Лучший ответ

Вы можете использовать groupBy

public function getTotalAttribute($value)
{
    $transformers = $this->transformers();
    return $transformers->groupBy('currency_id')
    ->selectRaw('sum(quantity * price) as sum, currency_id')
    ->get();
}
1
hossamGamal 14 Окт 2018 в 16:20