2014-11-02 7 views
5

assumendo che ho il tavololaravel - eloquenti - ottenere somma di modello relativo colonna specifica

ordini

con campi

id, userId, quantità, descrizione

e la tabella

utente

con vari campi

come se la bacchetta di ottenere tutti gli utenti (con tutti i suoi campi) e la somma della colonna "quantità" degli ordini relativi a tale utente?

assumendo che ho:

utente: {id: 15, Nome: jim, Cognome: Morrison, genere: maschile}

e

ordine: { id: 1, userId: 15, importo: 10, descrizione: "order xxx"},

ordine: {id: 3, userId: 15, quantità: 40, descrizione: "ordina aa"}

Vorrei ricevere:

utente: {id: 15, Nome: jim, Cognome: Morrison, genere: maschile, orderAmount: 50}

Naturalmente vorrebbe evitare la dichiarazione di foreach.

Fondai questo sul mio modello di utente

public function userOrder(){ 
    return $this->hasMany('Order', 'userId'); 
} 

E ho provato questo:

return $this->hasMany('Order', 'userId')->sum('amount'); 

senza alcuna fortuna ...

risposta

8

Alcuni thaughts e, si spera una risposta alla tua domanda:

Vorrei rinominare la tabella utente per gli utenti di attenersi a laravel conventio ns. http://laravel.com/docs/4.2/eloquent#basic-usage

vorrei nominare il metodo del manuale d'ordini modello

public function orders() 
{ 
    return $this->hasMany('Order', 'userId'); 
} 

per interrogare un utente, i suoi ordini e somma successiva i suoi ordini valori di quantità:

$userdata = User::with('orders')->where('userId', 15)->first(); 
$sum = $userdata[ 'orders' ]->sum('amount'); 
+0

grazie per la risposta. Sono stato molto vago nel definire i miei tavoli ... ovviamente si chiama "utenti" e il mio modello si chiama "Utente", ma temo che la tua non sia la soluzione che sto cercando ... Dai un'occhiata a [ this]: http: //stackoverflow.com/questions/25655388/get-max-value-for-each-related-model-with-eloquent-in-laravel e scopri come Jarek Tkaczyk ha risolto il mio problema con "latest()" funzione ... cerco qualcosa del genere – ciccioassenza

+0

ah oh ... non la vedo nella tua domanda ma hey, sono felice che tu abbia trovato la tua soluzione :-) – Kristo

+0

Perdonami, il mio inglese è brutto e ho problemi a spiegare il problema ... il link che ho postato è legato ad un'altra domanda in cui quello che volevo sottolineare è come con quella soluzione sono riuscito a prendere solo l'ultimo messaggio tra quelli correlati, senza usare un foreach. Il problema persiste :( – ciccioassenza

Problemi correlati