Condición en el having que no está siendo tomada por el paginador

Hola muchachos, lo que sucede es que en un criteria estoy colocando una condición en el having "$criteria->having" y los resultados de búsqueda me salen bien, es decir, se aplica la condición que coloco en el having, pero el paginador no me toma esa condición del having y me indica que hay más registros de los que en realidad hay.

Alguien sabe como puedo solucionar esto?

Podés postear el código que estas utilizando?

Gracias,

Sip, quitando algunas validaciones el código es el siguiente:




$criteria = new CDbCriteria;

$criteria->with = array('relProPgd', 'relProPec');;

$select = array();


$select[] = "funct_prop_available(t.pro_code,'{$dateSince}','{$dateTo}',if(prt_code=1,relProPec.pec_hole,0)) AS pro_available";

$criteria->having = "pro_available = 0";


$select[]= 'pro_code';

$select[]= 'pro_name';

$select[]= 'prt_code';

$select[]= 'pro_url';

$criteria->select = $select;


//Aquí se obitnen los datos de las propiedades que encajan con los parametros de busqueda segun el criteria.

$properties = new CActiveDataProvider('Property', array(

    'criteria'=>$criteria,

    'pagination'=>array(

        'pageSize'=>self::PAGE_SIZE,

    ),

));


    $this->render('apartmentSearchResult', array(

    				'propertiesData'=>$properties->getData(),

    				'propertiesPagination'=>$properties->getPagination(),

    ));




El having lo hago sobre lo que me retorna la función que incluyo en el select y funciona, es decir, se aparecen la cantidad de resultados correctos, pero en el objeto pagination no aparece la cantidad correcta de datos y ya probé haciendo el count y el count tampoco me muestra bien la cantidad de datos:


echo Property::model()->with('relProPgd','relProPec')->count($criteria);

Nota: la versión que estoy utilizando es yii-1.1.2.r2086

Hasta donde se hay un bug con el count y el having:

Issue 1244

Supongo que será solucionado en alguna version futura…

Gracias PoL por tu respuesta. :unsure: … ojalá arreglen eso pronto… por ahora trataré entonces de ver como me las ingenio para solucionar el problema así no se vea bonito. :(

Hola muchachos, quería comentarles como lo solucioné, resulta que como el problema está es en el count(), entonces lo que hice fue que al crear el objeto pagination no hice el count como habitualmente se hace sino que hice un count de PHP de la siguiente forma:




$pages = new CPagination(count(Property::model()->findAll($criteria)));

$pages->pageSize = self::PAGE_SIZE;

$pages->applyLimit($criteria);

			

$models = Property::model()->findAll($criteria);



Claro, esta es una solución temporal mientras el equipo de desarrollo soluciona el problema del count con el having.

Yo te iba a decir eso, pero que podías solucionarlo utilizando el CountBySql… pero al usar el activeDataProvider, no vas a poder…

Se que este bug es uno en los que mas está trabajando samdark por lo que proximamente estará solucionado. No tenemos estimado cuando.

También estamos trabajando mucho con la nueva versión de Yii, la 1.2, definiendo las cosas que se agregan y las que se sacan.

Saludos

Genial, muchas gracias Sebas.

Justo tengo el mismo problema, pero con un ‘group by’, por lo que el paginator hace eso que dices de contar mas registros, bueno esperemos que se solucione pronto.