2016-06-13 15 views
0

Ich kratze mich gerade mit diesem Kopf.Laravel hasOne + group_by, Summe erhalten

Was ich habe.

$entries = Meta::whereIn('settlement_id', [1])->groupBy('client_id')->get();

Meta::model() hat eine hasOne Beziehung zu anderen Tabellen, in meinem Beispiel mit einem Sport Tisch. Mit einem Attribut in meinem Array kann ich erreichen, was ich will.

Also in einer Schleife habe ich mein Feld verfügbar $entry->Sport->amount das funktioniert perfekt.

Was ich brauche.

$entries = Meta::whereIn('settlement_id', [1,2,3])->groupBy('client_id')->get();

Nun, wenn ich meine Array mit mehreren IDs erweitern, erwarte ich, dass $entry->Sport->amount die Summe aller IDs zurückgibt. Aber das tut es nicht.

Ich kann nicht herausfinden, was ich falsch mache.

Alle Hilfe ist willkommen.

+0

Sie sagen, es ist es die Summe aller IDs zurückgegeben werden erwartet, was * nicht * es im Moment zurückkehren? – ntzm

+0

Es gibt den Wert des ersten gefundenen Datensatzes zurück, nicht die Summe aller Felder. – DavidCandreva

Antwort

0

Ihre hasOne Beziehung bedeutet, dass jeder Meta einen separaten Sport haben wird, so dass, wenn Sie Schleife $entries jeder $entry->Sport die Menge dem aktuellen Meta bezogen haben, nicht eine Summe aller von ihnen.

Wenn Sie die Summe von Sport Betrag für spezifische Meta haben möchte s könnte es einfacher sein, um eine Abfrage aus dem Modell Sport zu machen, so etwas wie (ich weiß nicht, wie Sie Ihre Beziehungen Setup so ist dies nur ein Beispiel):

Sport::whereIn('meta_id', [1,2,3])->sum('amount');

0

das ist richtig, ist es eine Möglichkeit, dass ich dies erreichen kann? Indem ich hasOne zu etwas anderem ändere?

Ich möchte nicht jede spezifische verwandte Meta-Tabelle abfragen.

public function Sport() { return $this->hasOne('App\Sport', 'settlement_meta_id'); }

meine Datenbank-Tabelle Sport sieht wie folgt aus:

protected $fillable = [ 'settlement_meta_id', 'bet', 'payout' ];