求助!按角色查询用户的方法。

用户表字段:id,账号(name),密码(password)

用户-角色表:id,用户id(uid),角色标记(code)

角色表:id,角色名称(role),角色标记(code)

现在需要在用户的列表页面根据角色筛选用户,一个用户可同时拥有多个角色,User模型的关联情况:

public function relations(){

return array(

   'role'=>array(self:HAS_MANY,'Assignment','uid'),

)

}

UserController.php现在所写的代码

$criteria->with=array(

'role'=>array(


           'condition'=>'role.code="'.$_POST['code'].'"'


        ),

)

但现在在用户列表页面选择角色提交过去后,搜索出来的结果还是所有的用户,只是用户关联出来的角色减少了,请问各位有什么好点的办法直接在用户的列表页面(不能在角色列表反向关联)通过角色筛选出现在所选这个角色下的所有用户。

phpmyadmin中用下面sql可以实现效果:

select a.* from user as a left join Assignment as b on a.id=b.uid where b.code="$_POST[‘code’]";

如果你要实现,一个用户有多个权限的话,需要使用many to many的方式连接表。

在YII里面,如果要实现many to many的连接,需要再建一张辅助表,

例如(role_child)

user_id role_id

然后在User的Relations里面这么写

‘Roles’=>array(self::MANY_MANY, ‘Role’, ‘role_child(user_id, role_id)’)

这样就可以实现你说的一个用户多个角色

但是我不建议这样的权限分配方案,

如果你要实现这种一个用户多个角色,建议参考CDbAuthManager

非常感谢!这个方法确实起作用了,但现在用:

$criteria->with=array(

‘role’=>array(‘condition’=>‘role.name="’.$_POST[‘name’].’"’)

)

查询的时候,这个$criteria->with,貌似在使用CPagination后就消失了,user:Model()->findAll($criteria)查询出来的数据就和没有加$criteria->with一样。只要把分页CPagination这段代码去掉,效果就对了,这事什么原因啊!

看你的分页代码怎么将分页的条件写到criteria里面的

$pages->applyLimit($criteria);

我是这样写的

就是这也写的啊!但就是写了之后,findall时with的内容就没有了

那就不清楚是个什么情况了,自己想办法调试以下吧