Построитель красноречивых запросов Laravel – сумма с группой по отношениюPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Построитель красноречивых запросов Laravel – сумма с группой по отношению

Сообщение Anonymous »

Я ищу решение для построения запросов для следующего:
Таблица: транзакции_типы
| id | type_hash | description | category |
|----|-----------|-----------------|----------|
| 1 | abcd | sale price | sale |
| 2 | dbac | sale tax | sale |
| 3 | agft | sale shipping | sale |
| 4 | pgsk | refund price | refund |
| 5 | sa2r | refund tax | refund |
| 6 | sdf4 | refund shipping | refund |

Таблица: транзакции
| id | type_hash | amount |
|----|-----------|--------|
| 1 | abcd | 12 |
| 2 | dbac | 14 |
| 3 | agft | 19 |
| 4 | pgsk | -20 |
| 5 | sa2r | -12 |
| 6 | sdf4 | -7 |

Связь — транзакция принадлежит типу транзакции
public function transactionType() : BelongsTo
{
return $this->belongsTo(TransactionType::class, 'type_hash', 'type_hash');
}


Результат, который я ищу в таблице транзакций:
  • Агрегированная сумма (сумма) как сумма
  • Группировка транзакций по TransactionType.category
т.е.
| Results | transactionType.category | sum(amount) |
|---------|--------------------------|---------------|
| 1 | sale | 45 |
| 2 | refund | -39 |

Я могу добиться следующей работы, но в идеале я хочу выполнять всю агрегацию в построителе запросов, а не в коллекции:
Transaction::selectRaw('sum(amount) as amount')
->with('transactionType')
->get()
->groupBy('transactionType.category');

Я пробовал следующее (и его варианты), но не смог заставить его работать:
Transaction::selectRaw('sum(amount) as amount')
->with(['transactionType' => function($query){
$query->select('category')->groupBy('category');
}])
->get();


Подробнее здесь: https://stackoverflow.com/questions/558 ... lationship
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»