示例#1
0
 /**
  * {@inheritDoc}
  */
 public function findTranslation(AbstractWrapper $wrapped, $locale, $field, $translationClass, $objectClass)
 {
     $em = $this->getObjectManager();
     // first look in identityMap, will save one SELECT query
     foreach ($em->getUnitOfWork()->getIdentityMap() as $className => $objects) {
         if ($className === $translationClass) {
             foreach ($objects as $trans) {
                 $isRequestedTranslation = !$trans instanceof Proxy && $trans->getLocale() === $locale && $trans->getField() === $field;
                 if ($isRequestedTranslation) {
                     if ($this->usesPersonalTranslation($translationClass)) {
                         $isRequestedTranslation = $trans->getObject() === $wrapped->getObject();
                     } else {
                         $isRequestedTranslation = $trans->getForeignKey() === $wrapped->getIdentifier() && $trans->getObjectClass() === $wrapped->getMetadata()->name;
                     }
                 }
                 if ($isRequestedTranslation) {
                     return $trans;
                 }
             }
         }
     }
     $qb = $em->createQueryBuilder();
     $qb->select('trans')->from($translationClass, 'trans')->where('trans.locale = :locale', 'trans.field = :field');
     $qb->setParameters(compact('locale', 'field'));
     if ($this->usesPersonalTranslation($translationClass)) {
         $qb->andWhere('trans.object = :object');
         $qb->setParameter('object', $wrapped->getObject());
     } else {
         $qb->andWhere('trans.foreignKey = :objectId');
         $qb->andWhere('trans.objectClass = :objectClass');
         $qb->setParameter('objectId', $wrapped->getIdentifier());
         $qb->setParameter('objectClass', $objectClass);
     }
     $q = $qb->getQuery();
     $q->setMaxResults(1);
     $result = $q->getResult();
     if ($result) {
         return array_shift($result);
     }
     return null;
 }