Acerca De Paginación

Hola foro,

Estoy agrupando unos datos para mostrar en un grid pero la paginación hace referencia al total de los registros no al resultado agrupado.

Como pueden ver en el adjunto, el resultado agrupado es de 3 registros de 12 en total lo cual es correcto pero en la paginación me sale que son 12, cuando son muchos hasta crea las pestañas de pagina 2, 3, 4… sin datos claro.

Esto tengo en el modelo, agrupar.




public function porcotizar()

{

	$criteria=new CDbCriteria;

	$criteria->alias = 'rfq_items';

	$criteria->select = 'id_familia';

	$criteria->condition = 'rfq_items.activo = 1 AND rfq_items.estado = 1 OR rfq_items.estado = 2 OR rfq_items.estado = 3';

	$criteria->group = 'id_familia';

	$criteria->with = 'idFamilia';


	//$criteria->compare('estado',$this->getEstadoPartidaNum($this->estado));

	$criteria->compare('idFamilia.familia', $this->familia_search, true);


	return new CActiveDataProvider($this, array(

		'criteria'=>$criteria,

		'sort'=>array(

			'attributes'=>array(

				'familia_search'=>array(

					'asc'=>'idFamilia.familia',

					'desc'=>'idFamilia.familia DESC',

				),

        	'*',

			),

		),

		'pagination'=>array(

			'pageSize'=>100,

		),

		'keyAttribute'=>'id_familia',

	));

}



Este es el grid en la vista.




$this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'items-grid',

	'dataProvider'=>$model->porcotizar(),

	'cssFile' => Yii::app()->theme->baseUrl . '/css/gridviewstyle/styles.css',

	'columns'=>array(

		array( 

			'class'=>'CCheckBoxColumn', 

			'value'=>'$data->id_familia',

			'selectableRows'=>10,

			'id'=>'chk',

		),

		array(

            'name'=>'familia_search',

            'value'=>'$data->idFamilia->familia',

        ),

	),

));



Cómo lo puedo corregir?

Gracias.

Interesante

Interesante realmente…

Lo que que pasa es que YII no toma en cuenta el GROUP BY para hacer los COUNT.

Por que? porque así lo quiso programar el chino!

Nah mentira, en realidad es por la forma como trabajan los manejadores de bases de datos, los COUNT te retornan un resultado diferente al esperado cuando le agregas un GROUP BY al sql.

Una posible solución es que agregues la cantidad de datos retornados manualmente al parámetro totalItemCount. Ejemplo:





return new CActiveDataProvider($this, array(

                'criteria'=>$criteria,

                'sort'=>array(

                        'attributes'=>array(

                                'familia_search'=>array(

                                        'asc'=>'idFamilia.familia',

                                        'desc'=>'idFamilia.familia DESC',

                                ),

                '*',

                        ),

                ),

                'pagination'=>array(

                        'pageSize'=>100,

                ),

                'keyAttribute'=>'id_familia',

                'totalItemCount'=>3,

        ));



En el ejemplo le agregue el valor 3 porque se que es la cantidad de registros que te retorna la consulta, pero es aquí donde deberás arreglártelas para calcular este valor y pasárselo dinamicamente.

PD: Estoy seguro de la causa mas no si es la única solución.

Saludos.

Jaja, ok, entonces mientras le doy por ahí, a ver si alguien más da otra idea mientras.

Gracias.

bueno aquí tendrías que agregar a tus consultas una mas que te cuente los registros que seria algo así en sql SELECT COUNT (*) FROM TABLAACONTAR el resultado de este query es un numero que es el numero total de registros de la tabla lo metes en una variable y lo pasas a tu array

eturn new CActiveDataProvider($this, array(

            'criteria'=>$criteria,


            'sort'=>array(


                    'attributes'=>array(


                            'familia_search'=>array(


                                    'asc'=>'idFamilia.familia',


                                    'desc'=>'idFamilia.familia DESC',


                            ),


            '*',


                    ),


            ),


            'pagination'=>array(


                    'pageSize'=>100,


            ),


            'keyAttribute'=>'id_familia',


            'totalItemCount'=>$rows,


    ));