Problema con consulta MANY_MANY y CActiveDataProvider en criteria

La idea general es obtener todos los usuarios que estan asociados a una cuenta específica, para esto tengo las siguientes tablas:




tb_users

  user_id

  ...


tb_accounts

  account_id

  ...


Accounts_has_Users

  user_id

  account_id



Dentro del modelo de Users tengo establecida la relacion de muchos a muchos hacia la tabla Accounts_has_Users




public function relations()

{

  return array(

    'Accounts'=>array(self::MANY_MANY, 'Accounts', 'Accounts_has_Users(user_id, account_id)', 'joinType'=>'INNER JOIN'),

  );

}



Buscando una manera de obtener solamente los usuarios que pertenecen a la cuenta con id "1" desde un controlador tengo:




$UsersdataProvider=new CActiveDataProvider('Users', array(

  'pagination'=>array(

    'pageSize'=>self::PAGE_SIZE,

  ),

  'criteria'=>array(

    'with'=>array('Accounts'),

    'together'=>true,

    'condition'=>'Accounts.account_id = 1',

  ),

));



CActiveDataProvider genera 2 consultas y la primera se realiza bien, es la siguiente…




SELECT COUNT(DISTINCT `t`.`user_id`) 

FROM `tb_users` `t` 

INNER JOIN `Accounts_has_Users` `Accounts_Accounts` ON (`t`.`user_id`=`Accounts_Accounts`.`user_id`) 

INNER JOIN `tb_accounts` `Accounts` ON (`Accounts`.`account_id`=`Accounts_Accounts`.`account_id`)

WHERE (Accounts.account_id = 1)



La segunta consulta genera el error “Unknown column ‘Accounts.account_id’ in ‘where clause’”, esto porque (Accounts.account_id) no existe en la tabla tb_users




SELECT `t`.`user_id` AS `t0_c0`, `t`.`user_name` AS `t0_c1`,

`t`.`user_lastname` AS `t0_c2`, `t`.`user_email` AS `t0_c3`,

`t`.`user_password` AS `t0_c4`, `t`.`user_active` AS `t0_c5`,

`t`.`address_id` AS `t0_c6` 

FROM `tb_users` `t`  

WHERE (Accounts.account_id = 1) LIMIT 10



Ahora la pregunta, porque pasa esto o como se puede hacer para evitarlo, a alguien le ha sucedido lo mismo o sera que yo estoy haciendo algo equivocado ??

No he usado nunca el CActiveDataProvider, pero al parecer en la segunda consulta, no te respeta el with del criteria, es decir no te esta haciendo el join con Account_has_Users ni con Accounts. Sera un bug?

Fijate de preguntarselo a qiang en ingles en bugs…

gracias!

Por sus respuestas he de pensar que el framework es quien esta escribiendo el codigo equivocado… entonces siendo así tendre que recurrir ahora al foro en ingles y si es asi como dice @sebas preguntarle a Qiang directamente en bugs…

Yo de todas maneras por mi parte seguire buscandole una solución…

Gracias!!

tengo el mismo problema

se soluciono?

por ahora lo que hice fue poner una condicion exists

en mi caso, para filtrar modelos a un usuario




                $cond="exists (select 1 from permisos where id_modelo=t.id_modelo and usuario='".

                                        Yii::app()->user->name."')";


                $criteria->addCondition($cond);




Creo que esto ya esta solucionado en el trunk, aunque no puedo confirmarlo.

dejo como referencia estos post que hablan de lo mismo

http://www.yiiframework.com/forum/index.php?/topic/7420-undestanding-relational-queries-with-cactivedataprovider/

http://www.yiiframework.com/forum/index.php?/topic/7566-condition-involving-a-not-directly-related-table-in-cactivedataprovider/