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;
}
하나의 쿼리로 모든 변환 된 객체를 가져올 수 있습니까?
안녕하세요, 저는 같은 문제가 있습니다. 해결책을 찾았습니까? 고맙습니다. –
범프. querybuilder를 사용할 때 같은 문제가 발생합니다. – NDM