2014-05-14 3 views
1

Im 내 프로젝트에서 Gedmo Translatable을 사용 중입니다. 제품 엔터티 및 포함 엔터티가 있습니다. 그들 사이의 관계는 ManyToMany입니다.Internalisation Symfony, Gedmo 관련 단체에 대한 번역, 번역 된 번역

제품 엔티티

namespace Traffic\ShopBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 
use Traffic\ShopBundle\Model\Product as ProductModel; 
use Gedmo\Mapping\Annotation as Gedmo; 


/** 
* @ORM\Entity(repositoryClass="Traffic\ShopBundle\Repository\ProductRepository") 
* @Gedmo\TranslationEntity(class="Traffic\ShopBundle\Entity\ProductTranslation") 
* 
*/ 
class Product extends ProductModel { 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", length=255) 
    * @Gedmo\Translatable 
    * 
    * @var type string 
    */ 
    protected $name; 

    /** 
    * @ORM\ManyToMany(targetEntity="Inclusion") 
    * @ORM\JoinTable(name="product_inclusion", 
    *  joinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="inclusion_id", referencedColumnName="id")} 
    *) 
    * 
    * @var type Collection 
    */ 
    protected $inclusions; 

    /** 
    * @ORM\OneToMany(
    * targetEntity="ProductTranslation", 
    * mappedBy="object", 
    * cascade={"persist", "remove"} 
    *) 
    */ 
    protected $translations; 

..... 
} 

인 클루 법인 내 저장소 클래스에서

namespace Traffic\ShopBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Traffic\ShopBundle\Model\Inclusion as InclusionModel; 
use Gedmo\Mapping\Annotation as Gedmo; 


/** 
* @ORM\Entity(repositoryClass="Traffic\AdminBundle\Repository\TranslatableRepository") 
* @ORM\InheritanceType("SINGLE_TABLE") 
* @ORM\DiscriminatorColumn(name="discr", type="string") 
* @ORM\DiscriminatorMap({"sauce" = "Sauce", "topping" = "Topping"}) 
* @Gedmo\SoftDeleteable(fieldName="deletedAt") 
* @Gedmo\TranslationEntity(class="Traffic\ShopBundle\Entity\InclusionTranslation") 
* 
* @ORM\Table(name="inclusion") 
*/ 
class Inclusion extends InclusionModel { 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", length=255) 
    * @Gedmo\Translatable 
    * 
    * @var type string 
    */ 
    protected $name; 

    /** 
    * @ORM\OneToMany(
    * targetEntity="InclusionTranslation", 
    * mappedBy="object", 
    * cascade={"persist", "remove"} 
    *) 
    */ 
    protected $translations; 
....... 
} 

나는 번역 객체를 가져 오기 위해 방법을 가지고 있지만, 그것은 단지 내 제품하지 흠을 변환

namespace Traffic\ShopBundle\Repository; 

use Traffic\AdminBundle\Repository\TranslatableRepository; 
use Traffic\ShopBundle\Entity\Kiosk; 

/** 
* Description of FinancialTransactionRepository 
* 
* @author bart 
*/ 
class ProductRepository extends TranslatableRepository { 


    public function findAllProductsForKiosk(Kiosk $kiosk, $locale = "es"){ 

     $qb = $this->createQueryBuilder("p") 
      ->leftJoin('p.kiosks', 'k') 
      ->leftJoin('p.flavours', 'f') 
      ->leftJoin('p.inclusions', "i") 
      ->leftJoin('p.type', "t") 

      ->where('k.kiosk = :kiosk') 
     ; 

     $qb->setParameter("kiosk", $kiosk); 

     $results = $this->getTranslatedQuery($qb, $locale); 

     return $results->execute(); 
    } 


} 

및 getTranslatedQuery

/** 
* Returns translated Doctrine query instance 
* 
* @param QueryBuilder $qb  A Doctrine query builder instance 
* @param string  $locale A locale name 
* 
* @return Query 
*/ 
protected function getTranslatedQuery(QueryBuilder $qb, $locale = null) 
{ 
    $locale = null === $locale ? $this->defaultLocale : $locale; 

    $query = $qb->getQuery(); 

    $query->setHint(
     Query::HINT_CUSTOM_OUTPUT_WALKER, 
     'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker' 
    ); 

    $query->setHint(TranslatableListener::HINT_TRANSLATABLE_LOCALE, $locale); 

    return $query; 
} 

하나의 쿼리로 모든 변환 된 객체를 가져올 수 있습니까?

+0

안녕하세요, 저는 같은 문제가 있습니다. 해결책을 찾았습니까? 고맙습니다. –

+0

범프. querybuilder를 사용할 때 같은 문제가 발생합니다. – NDM

답변

-1

수화 모드를 변경해야할까요?

$query->setHydrationMode(TranslationWalker::HYDRATE_OBJECT_TRANSLATION); 
    $config = $this->container->get('doctrine')->getManager()->getConfiguration(); 
    if ($config->getCustomHydrationMode(TranslationWalker::HYDRATE_OBJECT_TRANSLATION) === null) { 
     $config->addCustomHydrationMode(
      TranslationWalker::HYDRATE_OBJECT_TRANSLATION, 
      'Gedmo\\Translatable\\Hydrator\\ORM\\ObjectHydrator' 
     ); 
    }