Yii Framework Forum: Problema con consulta MANY_MANY y CActiveDataProvider en criteria - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Problema con consulta MANY_MANY y CActiveDataProvider en criteria Rate Topic: -----

#1 User is offline   Jack Fiallos 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 256
  • Joined: 15-October 09
  • Location:Mexico

Posted 15 March 2010 - 02:42 PM

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 ??
Celestic Dev Team
Yii Open Source Project Manager
0

#2 User is offline   PoL 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 506
  • Joined: 05-November 08
  • Location:Buenos Aires, Argentina

Posted 15 March 2010 - 02:47 PM

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?

Don't say what you think, think what you say
The problem is communication! Excess of communication!
0

#3 User is offline   sebas 

  • Advanced Member
  • Yii
  • Group: Yii Dev Team
  • Posts: 497
  • Joined: 28-October 08
  • Location:Buenos Aires, Argentina

Posted 15 March 2010 - 05:02 PM

Fijate de preguntarselo a qiang en ingles en bugs...

gracias!
0

#4 User is offline   Jack Fiallos 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 256
  • Joined: 15-October 09
  • Location:Mexico

Posted 15 March 2010 - 11:36 PM

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!!
Celestic Dev Team
Yii Open Source Project Manager
0

#5 User is offline   gallego123 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 11-August 09
  • Location:Argentina

Posted 17 May 2010 - 06:15 AM

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);


KISS - Keep It Simple Stupid
ASAP-As Soon As Possible
http://www.yiiframew...oc/cookbook/71/
0

#6 User is offline   PoL 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 506
  • Joined: 05-November 08
  • Location:Buenos Aires, Argentina

Posted 17 May 2010 - 08:24 AM

Creo que esto ya esta solucionado en el trunk, aunque no puedo confirmarlo.
Don't say what you think, think what you say
The problem is communication! Excess of communication!
0

#7 User is offline   gallego123 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 535
  • Joined: 11-August 09
  • Location:Argentina

Posted 18 May 2010 - 11:06 AM

dejo como referencia estos post que hablan de lo mismo
http://www.yiiframew...vedataprovider/
http://www.yiiframew...vedataprovider/
KISS - Keep It Simple Stupid
ASAP-As Soon As Possible
http://www.yiiframew...oc/cookbook/71/
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users