2015-10-10 2 views
5

私はYii2を使用していると私は2つのテーブルを持っている:YII2関係を使って合計する方法hasMany?

user (id) 
answer_points (id, user_id, value) 

がどのように私は和DESCとの関係でソート、フィルタリングとGridViewの中で、各ユーザーのすべてのポイントを合計することができますか?あなたのUserモデルで

return $this->hasMany(\frontend\models\Points::className(), 
     ['user_id' => 'id'])->sum('value'); 
+0

しないでください。[counter](http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#updateCounters%28%29-detail)の列をユーザー。 – Beowulfenator

答えて

1

、あなたはUserSearchモデルでは、このゲッター

public function getPoints() 
{ 
    return $this->hasMany(\frontend\models\Points::className(), ['user_id' => 'id'])->sum('value'); 
} 

を持っている必要があり、あなたが行うことができます今すぐ

public function search(...) { 
    $query = User::find()->joinWith('points'); //<--- alias to the getter defined above 
    ... 
} 

使用すると、その列を追加することができるはずですあなたのソートとフィルターのその列。

+0

@ user5431131この回答は役に立ちましたか? – saada

0

カスタムDataProviderを作成し、GridView およびカスタムSearchModelで使用できます。

+0

この回答はコメントだったはずです。 –

関連する問題