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 ??