예제 #1
0
 /**
  * @return ArrayIterator
  */
 public function getIterator()
 {
     return $this->iterator ? $this->iterator : ($this->iterator = new ArrayIterator($this->query->getResult($this->options['hydrationMode'])));
 }
예제 #2
0
 /**
  * @param AbstractQuery $query
  * @return UserDTO[]
  */
 protected function createUserDTOs(AbstractQuery $query)
 {
     $userDTOs = [];
     foreach ($query->getResult(AbstractQuery::HYDRATE_ARRAY) as $arr) {
         $userDTOs[$arr['id']] = new UserDTO($arr['id'], $arr['firstName'], $arr['lastName'], $arr['middleName'], $arr['phone'], $arr['email'], $arr['enabled'], $arr['campusId'], $arr['otherId'], $arr['userSyncIgnore'], $arr['icsFeedKey'], $arr['root']);
     }
     $userIds = array_keys($userDTOs);
     $qb = $this->_em->createQueryBuilder();
     $qb->select('u.id AS userId, c.id AS primaryCohortId, s.id AS schoolId, auser.id as authenticationId')->from('IliosCoreBundle:User', 'u')->join('u.school', 's')->leftJoin('u.primaryCohort', 'c')->leftJoin('u.authentication', 'a')->leftJoin('a.user', 'auser')->where($qb->expr()->in('u.id', ':userIds'))->setParameter('userIds', $userIds);
     foreach ($qb->getQuery()->getResult() as $arr) {
         $userDTOs[$arr['userId']]->primaryCohort = $arr['primaryCohortId'] ? $arr['primaryCohortId'] : null;
         $userDTOs[$arr['userId']]->school = $arr['schoolId'];
         $userDTOs[$arr['userId']]->authentication = $arr['authenticationId'] ? $arr['authenticationId'] : null;
     }
     $related = ['reminders', 'directedCourses', 'administeredCourses', 'learnerGroups', 'instructedLearnerGroups', 'instructorGroups', 'offerings', 'instructedOfferings', 'instructorIlmSessions', 'programYears', 'roles', 'reports', 'cohorts', 'pendingUserUpdates', 'auditLogs', 'permissions', 'learnerIlmSessions', 'directedSchools', 'administeredSchools', 'administeredSessions', 'directedPrograms'];
     foreach ($related as $rel) {
         $qb = $this->_em->createQueryBuilder();
         $qb->select('r.id as relId, u.id AS userId')->from('IliosCoreBundle:User', 'u')->join("u.{$rel}", 'r')->where($qb->expr()->in('u.id', ':ids'))->orderBy('relId')->setParameter('ids', $userIds);
         foreach ($qb->getQuery()->getResult() as $arr) {
             $userDTOs[$arr['userId']]->{$rel}[] = $arr['relId'];
         }
     }
     return array_values($userDTOs);
 }