condicion filtrando mal para un MANY_MANY

Hola:

tengo tres tablas

+++++++++++++

+tbl_project+

±----------+

+id +

+title +

+end_date +(date yy-mm-dd)

+++++++++++++

MANY_MANY

++++++++++++++

+tbl_proj_cat+

±-----------+

+pId +

+catId +

++++++++++++++

++++++++++++++

+tbl_category+

±-----------+

+id +

+title +

++++++++++++++

estoy intentando crear un widget para la columna de navegacion de la pagina donde aparezcan las categorias y la cantidad

de proyectos vigentes en esa categoria [cuyo end_date >= date(‘Y-m-d’)]

para esto he creado un metodo en el model Category que me devuelva todas las categorias y los proyectos vigentes


	

public static function getListCategories()

	{

		$categories = self::model()->with(array('projects'=> //projects es el nombre de la relacion a los proyectos

				array('condition'=>'projects.end_date >='.date('Y-m-d'),

					   'select'=>'projects.id')

				))->findAll();

		return $categories;

	}



el metodo funciona pero me devuelve una cantidad de eventos incorrecta por categoria como si no aplicara la condicion

de manera correcta a los datos en la tabla de la base de datos. he probado con una fecha fija y tampoco me filtra bien

ya he probado varias alternativas como pasar la condicion en el metodo relations() o crear una relacion pero igual no funciona bien.

tengo otras maneras de hacer esto que se que funcionan pero quiero hacerlo de la forma Yii con AR que me parece lo

mas profesional y eficiente.

Agradezco cualquier aporte.

Saludos,

Diego

Hola, si sólo necesitas saber el número de projects vigentes, puedes crear una relación específica para ello en el model Category, por ejemplo:


'countProjectsVigentes' => array(self::STAT, 'Project', 'tbl_proj_cat(pId, catId)', 'condition'=>'Project.end_date >=CURDATE()'),

Esto en teoría te devolvería únicamente el número de projects vigentes por categoría, Y podrías recuperar sólo con esto, útil sólo para la columna en la que quieres mostrar el número:


$categories = self::model()->with('countProjectsVigentes')->findAll();

Espero que te sirva, saludos…

Hola safitanet:

Muchas Gracias por la respuesta me ha funcionado perfectamente!!

Guay, me alegro

Si quieres los proyectos para otro escenario, la relación es parecida, cambiando stat por many_many


'projectsVigentes' => array(self::MANY_MANY, 'Project', 'tbl_proj_cat(pId, catId)', 'condition'=>'Project.end_date >=CURDATE()'),

Saludos