雄弁

2017-08-11 23 views
1

で凝集体を選択するために、どのように私は2モデルがあります。私はそうのようなタイプでグループ化された取引の配列を持つユーザーを選択することができるようにしたい:雄弁

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

私は熱心にロードするためにこれを必要とするので、私は、ユーザーの配列を選択します。どのように私はそれのためにEloquentモデルを書く必要がありますか?私はすべてのドキュメントを読んだが、まだこれにアプローチする方法を知らない。

+0

合計金額の場合、合計金額はどのくらいですか? –

+0

'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(); 

私は助けてくれました!