framework example content column array php yii

php - example - Clasificando CListView en yii



yii2 framework gridview (1)

Por favor considere esto:

class User extends CActiveRecord { ... public function relations() { return array( ... ''articleCount'' => array(self::STAT, ''Article'', ''userid''), ... ); } ... }

Ahora, necesito crear un $dataProvider = new CActiveDataProvider(...) para alimentar un widget CListView al que deseo agregar articleCount a la propiedad sortableAttributes para que pueda ordenar los registros de usuario de acuerdo con la cantidad de artículos que el usuario es el autor para.

¿Cuál es el método más conveniente? ¿Cuáles son las otras alternativas?


Bueno, me tomó un tiempo, pero finalmente lo descubrí. ;)

Primero, asegúrate de tener la misma relación STAT que mencionas en tu pregunta.

Luego, en su método search () donde está construyendo su CDbCriteria para el CActiveDataProvider, haga algo como esto:

public function search() { $criteria=new CDbCriteria; $criteria->select = ''t.*, IFNULL( count(article.id), 0) as articleCount''; $criteria->join = ''LEFT JOIN article ON article.userid = t.id''; $criteria->group = ''t.id''; // other $criteria->compare conditions $sort = new CSort(); $sort->attributes = array( ''articleCount''=>array( ''asc''=>''articleCountASC'', ''desc''=>''articleCountDESC'', ), ''*'', // add all of the other columns as sortable ); return new CActiveDataProvider(get_class($this), array( ''criteria''=>$criteria, ''sort''=>$sort, ''pagination''=> array( ''pageSize''=>20, ), )); }

Luego, en su Vista donde saca su CGridView, haga esto así:

<?php $this->widget(''zii.widgets.grid.CGridView'', array( ''dataProvider''=>$model->search(), ''columns''=>array( ''articleCount'', // other columns here ) )); ?>

Esto funciona, lo probé (aunque no usé exactamente los mismos nombres, como ''artículo'', pero la idea básica debería funcionar :) Agregué algunas características de bonificación para que funcione mejor (como la magia IFNULL) pero la mayoría de las el crédito va a esta publicación del foro de Yii:
http://www.yiiframework.com/forum/index.php?/topic/7061-csort-and-selfstat-to-sort-by-count/

¡Espero que esto ayude! Sin embargo, deberían agregar un mejor soporte para esto, por lo que no es necesario realizar estas declaraciones SELECT difíciles. Parece algo que debería ''solo funcionar'', me gustaría presentar una solicitud de ''mejora'' en el rastreador de errores Yii .