Using STAT relation in CActiveDataProvider criteria

This is my controller action




public function actionIndex()

	{

		

		//Supervisor non possono vedere brani OPEN

		//Gerard (manager) non puo' vedere OPEN/REJECTED/PROPOSED/CLOSED

		//Editor non puo' vedere APERTO/PROPOSTO/REJECTED se non suo

		

		

		$with = array(

			'propostoCount',

			'pubblicatoCount',

			'pendingCount',

			'apertoCount',

			'rifiutatoCount',

			'chiusiCount',

		);

		

		

		$condition = 'propostoCount=1 AND pubblicatoCount=1 AND pendingCount=1 AND rifiutatoCount=1 AND chiusiCount>0';			

		

		

		$dataProvider=new CActiveDataProvider('Brano', array(

			'criteria'=>array(				

				'with'=>$with,

				'condition'=>$condition,

		        'order'=>'id DESC',

		    ),

		

		    'pagination'=>array(

		        'pageSize'=>5,

		    ),

		

		));

		

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

			'dataProvider'=>$dataProvider,

		));

	}

And these are my relations in Brano Model:


public function relations()

	{

		// NOTE: you may need to adjust the relation name and the related

		// class name for the relations automatically generated below.

		return array(

			'proposto' => array(self::HAS_ONE, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_PROPOSED, 'order'=>'ultimo_aggiornamento DESC'),

			'pubblicato' => array(self::HAS_ONE, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_PUBLISHED, 'order'=>'ultimo_aggiornamento DESC'),

			'pending' => array(self::HAS_ONE, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_PENDING, 'order'=>'ultimo_aggiornamento DESC'),

			'aperto' => array(self::HAS_ONE, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_OPEN, 'order'=>'ultimo_aggiornamento DESC'),

			'rifiutato' => array(self::HAS_ONE, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_REJECTED, 'order'=>'ultimo_aggiornamento DESC'),

			'chiusi' => array(self::HAS_MANY, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_CLOSED, 'order'=>'ultimo_aggiornamento DESC'),

		

			'propostoCount'=>array(self::STAT, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_PROPOSED ),

			'pubblicatoCount'=>array(self::STAT, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_PUBLISHED ),

			'pendingCount'=>array(self::STAT, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_PENDING ),

			'apertoCount'=>array(self::STAT, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_OPEN ),

			'rifiutatoCount'=>array(self::STAT, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_REJECTED ),

			'chiusiCount'=>array(self::STAT, 'BranoVersione', 'brano_id', 'condition'=>'stato='.BranoVersione::STATUS_CLOSED ),

		);

	}

When I try to run it it says:

CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘propostoCount’ in ‘where clause’. The SQL statement executed was: SELECT COUNT(DISTINCT t.id) FROM brano t WHERE (propostoCount=1 AND pubblicatoCount=1 AND pendingCount=1 AND rifiutatoCount=1 AND chiusiCount>0)

This is a very common problem, and I’m sorry, but there’s not a ‘magical yii’ solution. STAT relations don’t query in the same SQL statement as the primary query, so you can’t use that data as a part of your criteria UNLESS you explicitly define it as an addition to your criteria->select (which sort of defeats the purpose of having it as a defined relation).

If someone knows of a better way to get around the problem I would love to know it.