Problema Con Active Records

Hola a todos, los molesto para ver si pueden ayudarme con este problema con el cual llevo muchos días sin poder resolverlo, tengo 2 tablas con sus respectivos modelos:

Users

Id - username

1 - usuario1

2 - usuario2

3 - usuario3

4 - usuario4

Authassignment

itemname - userid (fk de la tabla tbl_users)

rol_a - 1

rol_c - 4

necesito generar un CActiveDataProvider desde el modelo "Authassignment" que muestre:

username - itemname

usuario1 - rol_a

usuario2 - null

usuario3 - null

usuario4 - rol_c

el problema es que hasta ahora lo máximo que logré (con el enfoque lazy loading) es que me muestre lo siguiente:

username - itemname

usuario1 - rol_a

 - null


 - null

usuario4 - rol_a

pero no consigo incluir en el CActiveDataProvider generado los nombres de los usuarios que no tienen un elemento de la tabla Authassignment asignado (que no tienen una fk asociada en la tabla Authassignment).

Desde la consola el sql generado por el application log de yii(SELECT t.itemname, t.userid,

t.bizrule, t.data FROM authassignment t RIGHT JOIN

tbl_users ON t.userid=tbl_users.id LIMIT 10) muestra los datos tal como los necesito:

username - itemname

usuario1 - rol_a

usuario2 - null

usuario3 - null

usuario4 - rol_c

Que estoy haciendo mal?

detallo la relación en el modelo Authassignment:

return array(‘user’=>array(

                  self::BELONGS_TO, 'Users', 'userid'),


                ),


	);

Detallo el método search en el modelo Authassignment:

public function search()

{





	$criteria=new CDbCriteria;





	$criteria->compare('itemname',$this->itemname,true);


	$criteria->compare('userid',$this->userid,true);


	//$criteria->with = array('user'=>array('joinType'=>'RIGHT JOIN',));


	//$criteria->with = array('user');


	$criteria->join = "RIGHT JOIN tbl_users ON t.userid=tbl_users.id"; 





	return new CActiveDataProvider($this, array(


		'criteria'=>$criteria,


	));


}

Desde ya muchas gracias por su ayuda.

Saludos a todos!!

Si está desarrollando un sistema de gestión de permisos, no sería mejor utilizar alguno que ya esté probado?

Por poner un ejemplo: Cruge (que tiene TODA su documentación en español y ha comprobado ser bastante estable)

Hay otras alternativas como RBAM, Rights, SRBAC, entre otros.

En cuanto al problema de los campos foráneos, se agregan: with y together.

  • With(<array de relaciones>): para indicarle a la función que debe incluir en la consulta algunas relaciones. Útil para lazy loading.
  • Together(): Para traer todo en una misma consulta. Útil para eager loading. (No puede/debería ir sin with)

Un detalle que cabe anotar es que las asignaciones no son acumulativas… es decir que si escribo sobre "with"… y luego vuelvo a asignarlo, entonces lo anterior se pierde. With es una variable más que se usa cuando se ejecuta la consulta y no un función que va acumulando lo q se asigna.

Saludos

gracias por tu respuesta, y si, tenés razón, quizás fue poco feliz de mi parte usar esas tablas de ejemplo, pero realmente me resultaría muy instructivo saber como resolverlo, ya que entre otras cosas me permitiría conocer mejor como funciona el framework.

gracias nuevamente por cualquier ayuda que me puedan brindar.

Diego