/** * Layer to Doctrine find by id. Apply caching here. * * @param int $id * @param mixed $eagerly, bool|array if array it must be a key, value format as "alias => property" of InstitutionMedicalCenter - ex: array('doctors' => 'a.doctors') * @return InstitutionMedicalCenter */ public function findById($id, $eagerly = true) { if (is_array($eagerly)) { $qb = $this->doctrine->getEntityManagerForClass('InstitutionBundle:InstitutionMedicalCenter')->createQueryBuilder(); $qb->select('a, ' . implode(', ', array_keys($eagerly)))->from('InstitutionBundle:InstitutionMedicalCenter', 'a'); foreach ($eagerly as $alias => $property) { $qb->leftJoin($property, $alias); } $qb->where('a.id = :centerId')->setParameter('centerId', $id); $result = $qb->getQuery()->getOneOrNullResult(); return $result; } if ($eagerly) { $qb = $this->doctrine->getRepository('InstitutionBundle:InstitutionMedicalCenter')->getQueryBuilderForEagerlyLoadedMedicalCenter(); $qb->andWhere('imc.id = :id')->setParameter('id', $id); $result = $qb->getQuery()->getOneOrNullResult(); } else { $result = $this->doctrine->getRepository('InstitutionBundle:InstitutionMedicalCenter')->find($id); } return $result; }