有user(用户表)、role_user(用户角色表——中间表)、role(角色表)、access(角色权限表)、node(权限表),五张表。
现有需求是查询某一个用户拥有的角色以及权限查询。
定义USER模型为:
User.php模型:
namespace app\index\model;
use think\Model;
class User extends Model
{
protected $pk = 'user_id';
public function roles()
{
return $this->belongsToMany('Role','role_user');
}
}
Role.php模型:
namespace app\index\model;
use think\Model;
class Role extends Model
{
protected $pk = 'role_id';
// protected $hidden = ['pivot','pid','status','remark'];
// public function accessRole()
// {
//// return $this->hasMany('Access','role_id');
// }
public function nodes()
{
return $this->belongsToMany('Node','access');//->order('node_id','desc');
}
}
Node.php模型:
namespace app\index\model;
use think\Model;
class Node extends Model
{
protected $pk = 'node_id';
protected $hidden = ['pivot'];
}在Index.php控制器中index方法查询: public function index()
{
$Tdata = User::with([
'roles'=>[
'nodes'=>function($query) {
$query->order('node_id','desc');
}
]
])
->where('user_id',3)
->select();
return json($Tdata);
}测试发现,数据可以查询,但是权限并没有进行排序:阅读源码发现:在多对多关系中,输入传入了$Closuer匿名函数,但是未使用,
因此:手工改造了BelongsToMany.php中的
,最后运行原来的测试方法,正确实现了排序。
最佳答案