when($search['name'] ?? false, function ($query) use ($search){ $query->whereLike('name', $search['name']); }) ->when($search['id'] ?? false, function ($query) use ($search){ $query->where('parent_id', $search['id']) ->whereOr('id', $search['id']); }) ->when($search['role_id'] ?? false, function ($query) use ($search){ $permissionIds = []; $permissions = Roles::where('id', $search['role_id'])->find()->getPermissions(); foreach ($permissions as $_permission) { $permissionIds[] = $_permission->pivot->permission_id; } if(!empty($permissionIds)) { $query->whereIn('id', $permissionIds); } }) ->order('sort', 'desc') ->order('id', 'desc') ->select() ->toArray(); } public function roles(): \think\model\relation\BelongsToMany { return $this->belongsToMany(Roles::class, 'role_has_permissions', 'role_id', 'permission_id'); } }