2016-12-27 3 views
0

У меня есть три таблицы:laravel5.3 отношение (коллекция)

users 
    -id 
    -name 
    -... 

addresses 
    -id 
    -user_id 
    -... 

transactions 
    -id 
    -address_id 
    -amount 

Моих моделей выглядят следующим образом:

пользователя модель:

public function addresses() 
{ 
return $this->hasMany('App\Address'); 
} 

адрес модель:

public function user() 
{ 
return $this->belongsTo('App\User'); 
} 

public function transactions() 
{ 
return $this->hasMany('App\Transaction'); 
} 

модель сделки:

public function address() 
{ 
return $this->belongsTo('App\Address'); 
} 

Теперь я хотел бы получить всю сумму всех транзакций для определенного пользователя. Каков наилучший способ архивировать это с помощью красноречия?

dd($forwarded_total->sum('addresses.transactions.amount')); 

возвращает 0 все время.

ответ

2

Вы можете создать hasManyThrough отношения в User модели, чтобы получить все связанные с ним операции, как:

public function transactions() 
{ 
    return $this->hasManyThrough('App\Transaction', 'App\Address'); 
} 

Тогда вы можете запросить его как:

$total_sum = User::find(1)->transactions->sum('amount'); 
+0

Awesome, большое спасибо за это! – wichtel