2015-10-10 13 views
5

Sto usando Yii2 e ho due tabelle:Come riassumere usando la relazione YII2 hasMany?

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

Come posso sommare tutti i punti di ogni utente in un GridView con filtraggio, l'ordinamento per somma DESC e di relazione?

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

Non farlo, meglio aggiungere una colonna punto [contatore] (http://www.yiiframework.com/doc-2.0/yii-db-baseactiverecord.html#updateCounters%28%29-detail) al tuo utente. – Beowulfenator

risposta

1

nel modello User, si dovrebbe avere questo getter

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

nel modello UserSearch, si può fare

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

Ora si dovrebbe essere in grado di aggiungere la colonna da usare quella colonna nei tuoi tipi e filtri.

+0

@ user5431131 ha aiutato questa risposta? – saada

0

È possibile creare i dati personalizzatiProvider e utilizzare in GridView And Custom SearchModel.

+0

Questa risposta avrebbe dovuto essere un commento. –

Problemi correlati