Laravel eloquent Query Builder – Summieren Sie mit der Gruppe über die BeziehungPhp

PHP-Programmierer chatten hier
Guest
 Laravel eloquent Query Builder – Summieren Sie mit der Gruppe über die Beziehung

Post by Guest »

Ich suche nach einer Abfrage-Builder-Lösung für Folgendes:

Tabelle: Transaktionstypen

Code: Select all

| 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   |
Tabelle: Transaktionen

Code: Select all

| id | type_hash | amount |
|----|-----------|--------|
| 1  | abcd      | 12     |
| 2  | dbac      | 14     |
| 3  | agft      | 19     |
| 4  | pgsk      | -20    |
| 5  | sa2r      | -12    |
| 6  | sdf4      | -7     |
Beziehung – Transaktion gehört zum Transaktionstyp

Code: Select all

public function transactionType() : BelongsTo
{
return $this->belongsTo(TransactionType::class, 'type_hash', 'type_hash');
}

Das Ergebnis, das ich in der Transaktionstabelle suche, ist:
  • Betrag Aggregierte Summe (Betrag) als Betrag
  • Transaktionen nach TransactionType.category gruppieren
d.h.

Code: Select all

| Results | transactionType.category | sum(amount)   |
|---------|--------------------------|---------------|
| 1       | sale                     | 45            |
| 2       | refund                   | -39           |
Ich kann Folgendes zum Laufen bringen, aber idealerweise möchte ich die gesamte Aggregation im Abfrage-Builder und nicht in der Sammlung durchführen:

Code: Select all

Transaction::selectRaw('sum(amount) as amount')
->with('transactionType')
->get()
->groupBy('transactionType.category');
Ich habe Folgendes (und Variationen davon) ausprobiert, bekomme es aber nicht zum Laufen:

Code: Select all

Transaction::selectRaw('sum(amount) as amount')
->with(['transactionType' => function($query){
$query->select('category')->groupBy('category');
}])
->get();

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post