/**
  * 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;
 }