Hola, tengo un problema a la hora de mostrar unos resultados usando un CListView. Necesito mostrar el resultado de dos consultas compartiendo en el mismo CListView de la siguiente forma:
Tengo que hacer una consulta a una tabla que me va a devolver X filas.
Luego hago otra consulta a la misma tabla que me devuelve otras Y filas.
Quiero que se muestre ambos resultados en un mismo CListView de forma que aparezcan primero los resultados de la primera consulta y después los de la segunda.
La diferencia entre la primera consulta y la segunda es una columna en la que en la primera tiene que tener un valor mayor a Z y en la segunda un valor menor a Z. Había pensando en el comando de SQL Union, que permite unir dos o más consulta compartiendo un mismo resultado, pero no sé como aplicarlo a un dataProvider o si el mismo dataProvider permite realizar lo que yo necesito.
Hola, una forma podría ser utilizando CArrayDataProvider para el CListView, y así construyes dos consultas en arrays separados y los unes en el orden que quieras:
$rawData1 = Yii::app()->db->createCommand('SELECT id, author, fecha FROM Post WHERE destacado=0')->queryAll();
$rawData2 = Yii::app()->db->createCommand('SELECT id, author, fecha FROM Post WHERE destacado=1')->queryAll();
$rawData = array_merge($rawData1, $rawData2);
$dataProvider = new CArrayDataProvider($rawData, array(
'id' => 'user',
'sort' => array(
'attributes' => array(
'id', 'author', 'fecha',
),
),
'pagination' => array(
'pageSize' => 10,
),
));
$this->render('index', array(
'dataProvider' => $dataProvider,
));
Es más aconsejable utilizar CActiveDataProvider para el CListView, pero a lo mejor esto te podría servir…
En el CLisView los campos los recuperas con $data[‘id’], como array que es, las etiquetas del nombre del campo no lo sé…