code: private function selectWithRoleSubquery(?string $columns = null, array $whereColumnsInfo = null, string $orderBy = null)
      {
          $columns = $columns ?? $this->defaultSelectColumnsString;
  
          /** start subquery */
          $q = new QueryBuilder("SELECT $columns ".$this->getFromClause()." WHERE permissions.id IN (SELECT permissions.id FROM permissions JOIN roles_permissions ON permissions.id=roles_permissions.permission_id JOIN roles ON roles_permissions.role_id=roles.id WHERE");
  
          /** build subquery */
          $opCount = 0;
          foreach ($whereColumnsInfo['roles.role']['operators'] as $op) {
              $sqlVarCount = $opCount + 1;
              if ($opCount > 0) {
                  $q->add(" OR ");
              }
              $q->add(" roles.role $op $$sqlVarCount", $whereColumnsInfo['roles.role']['values'][$opCount]);
              ++$opCount;
          }
          $q->add(") ORDER BY " . $this->getOrderBy());
  
          return $q->execute();
      }
docs: to filter the permissions with certain roles and return all the roles the permissions have