2017-08-11 56 views
1

我有2個模型:UserTransactionuser_id,typeamount字段。我希望能夠通過類型,像這樣分組的事務的陣列來選擇用戶:如何選擇聚集與雄辯

{ // User instance 
    'id': 123, 
    'username': 'John' 
    'transactions': [ 
     'type1': '231', // `type`: `sum(amount)` 
     'type2': '543' 
    ] 
} 

我將選擇用戶的陣列,所以我需要這個熱切加載。我應該如何爲此寫一個雄辯的模型?我已閱讀所有文檔,但仍不知道如何處理此問題。

+0

當你做總和(金額),哪些交易需要總和? –

+0

交易where'transaction.user_id = user.id',按'user_id'和'type'分組 – Poma

回答

1

你可以嘗試像:

$column = [DB::raw('SUM(order_qty) as volume'), 
      DB::raw('SUM(order_qty*price) as value')]; 
$oldValueVolume = OrderProduct::select($column) 
        ->where('order_id', $ordersId) 
        ->first(); 
+0

你回答什麼問題?那些專欄是什麼? – Axalix

0
User model: 

public function transactions() 
{ 
    return $this->hasMany(Transaction::class, 'user_id'); 
} 

那麼接下來調用:

User::with(
    [ 
     'transactions' => function ($q) { 
      return $q->groupBy(['type', 'user_id']) 
        ->selectRaw('sum(amount) as sum, type, user_id'); 
     } 
    ] 
)->get(); 

  1. 我用 '與' 的急切裝載。
  2. 你在一個問題中提到的自定義結構(對):

這部分

'transactions': [ 
    'type1': '231', // `type`: `sum(amount)` 
    'type2': '543' 
] 

那不是口才確實由默認,但you can always remap it

0

在你的User.php模型中創建一個名爲sumTransactions的方法。

public function sumTransactions() 
{ 
    return $this->hasMany('App\Transaction') 
      ->selectRaw('sum(amount) as aggregate') 
      ->groupBy('type'); 
} 

然後像這樣使用它。

$user->sumTransactions(); 

我希望我幫助!