在Doctrine2中,如何在多对多关系中进行翻译?Symfony2
我使用了可翻译与个人翻译;我已经实现了在Doctrine2中,如何在多对多关系中进行翻译?Symfony2,symfony,orm,doctrine-orm,many-to-many,translation,Symfony,Orm,Doctrine Orm,Many To Many,Translation,我使用了可翻译与个人翻译;我已经实现了PysTranslation,并且在PysRepository中使用了ORM查询提示。所有这些都很好,问题是当我翻译了实体genro时。此实体与Pys实体存在多对多关系,上述方法不起作用。如何翻译慷慨实体的$genNombre属性 /** * Pys * * @ORM\Table(name="pys") * @ORM\Entity(repositoryClass="Filmboot\PYSBundle\Entity\PysRepository")
PysTranslation
,并且在PysRepository
中使用了ORM查询提示。所有这些都很好,问题是当我翻译了实体genro
时。此实体与Pys
实体存在多对多关系,上述方法不起作用。如何翻译慷慨
实体的$genNombre
属性
/**
* Pys
*
* @ORM\Table(name="pys")
* @ORM\Entity(repositoryClass="Filmboot\PYSBundle\Entity\PysRepository")
* @Gedmo\TranslationEntity(class="Filmboot\PYSBundle\Entity\PysTranslation")
*/
class Pys
{
/**
* @var integer
*
* @ORM\Column(name="PYS_ID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $pysId;
/**
* @var string
*
* @ORM\Column(name="PYS_STR", type="string", length=255, nullable=false)
* @Gedmo\Translatable
*/
private $pysStr;
/**
* @var string
*
* @ORM\Column(name="PYS_TITULO", type="string", length=255, nullable=true)
* @Gedmo\Translatable
*/
private $pysTitulo;
/**
* @var integer
*
* @ORM\Column(name="PYS_DURACION", type="integer", nullable=true)
*/
private $pysDuracion;
/**
* @var integer
*
* @ORM\Column(name="PYS_ANYO", type="integer", nullable=true)
*/
private $pysAnyo;
/**
* @var string
*
* @ORM\Column(name="PYS_PAIS", type="string", length=255, nullable=true)
* @Gedmo\Translatable
*/
private $pysPais;
/**
* @var string
*
* @ORM\Column(name="PYS_SINOPSIS", type="string", length=3000, nullable=true)
* @Gedmo\Translatable
*/
private $pysSinopsis;
/**
* @var string
*
* @ORM\Column(name="PYS_GUIONISTA", type="string", length=255, nullable=true)
*/
private $pysGuionista;
/**
* @ORM\ManyToOne(targetEntity="Filmboot\DirectorBundle\Entity\Director", cascade={"remove"})
* @ORM\JoinColumn(name="DIR_ID", referencedColumnName="DIR_ID", onDelete="CASCADE")
*/
private $director;
/**
* @var string
*
* @ORM\Column(name="PYS_IMAGEN", type="string", length=255, nullable=true)
*/
private $pysImagen;
/**
* @var string
*
* @ORM\Column(name="PYS_IMAGEN_GRANDE", type="string", length=255, nullable=true)
*/
private $pysImagenGrande;
/**
* @ORM\ManyToMany(targetEntity="\Filmboot\ActorBundle\Entity\Actor", mappedBy="peliculas", cascade={"remove"})
*/
private $actores;
/**
* @ORM\ManyToMany(targetEntity="\Filmboot\PYSBundle\Entity\Genero", mappedBy="peliculas", cascade={"remove"})
*/
private $generos;
/**
* @ORM\OneToMany(targetEntity="\Filmboot\PYSBundle\Entity\Premio", mappedBy="pys", cascade={"remove"})
* @ORM\JoinColumn(name="PRE_ID", referencedColumnName="PRE_ID", onDelete="CASCADE")
*/
private $premios;
/**
* @ORM\OneToMany(targetEntity="\Filmboot\UsuarioBundle\Entity\Voto", mappedBy="pys", cascade={"remove"})
* @ORM\JoinColumn(name="PYS_ID", referencedColumnName="PYS_ID", onDelete="CASCADE")
*/
private $votaciones;
/**
* @ORM\OneToMany(targetEntity="PysTranslation", mappedBy="object", cascade={"persist", "remove"})
*/
private $translations;
public function __construct()
{
$this->actores = new ArrayCollection();
$this->generos = new ArrayCollection();
$this->votaciones = new ArrayCollection();
$this->translations = new ArrayCollection();
}
public function getTranslations()
{
return $this->translations;
}
public function addTranslation(PysTranslation $t)
{
if (!$this->translations->contains($t)) {
$this->translations[] = $t;
$t->setObject($this);
}
}
这是慷慨的
<?php
namespace Filmboot\PYSBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* Genero
*
* @ORM\Table(name="genero")
* @ORM\Entity
*/
class Genero
{
/**
* @var integer
*
* @ORM\Column(name="GEN_ID", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $genId;
/**
* @var string
*
* @ORM\Column(name="GEN_NOMBRE", type="string", length=255, nullable=true)
* @Gedmo\Translatable
*/
private $genNombre;
/**
* @ORM\ManyToMany(targetEntity="\Filmboot\PYSBundle\Entity\Pys", inversedBy="generos")
* @ORM\JoinTable(name="P_GENERO",
* joinColumns={@ORM\JoinColumn(name="GEN_ID", referencedColumnName="GEN_ID")},
* inverseJoinColumns={@ORM\JoinColumn(name="PYS_ID", referencedColumnName="PYS_ID")}
* )
*/
private $peliculas;
这是PysRepository
class PysRepository extends EntityRepository
{
public function findPeliculas()
{
$em = $this->getEntityManager();
$consulta = $em->createQuery('
SELECT p, a, d, g, pr, v
FROM PYSBundle:Pys p
JOIN p.actores a JOIN p.director d JOIN p.generos g JOIN p.premios pr JOIN p.votaciones v
ORDER BY p.pysTitulo ASC
');
return $consulta->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker')->getResult();
}
/**
*
* @param string $pysStr El slug de la película
*/
public function findPys($pysStr)
{
$em = $this->getEntityManager();
$consulta = $em->createQuery('
SELECT p, a, d, g, pr, v
FROM PYSBundle:Pys p
JOIN p.actores a JOIN p.director d JOIN p.generos g JOIN p.premios pr JOIN p.votaciones v
WHERE p.pysStr = :pysStr
');
$consulta->setParameter('pysStr', $pysStr);
return $consulta->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker')->getSingleResult();
}
}
我通过在
grano
实体注释中添加这一行解决了这个问题:
/**
* Genero
*
* @ORM\Table(name="genero")
* @ORM\Entity
* @Gedmo\TranslationEntity(class="Filmboot\PYSBundle\Entity\GeneroTranslation")
*/
class Genero
你能展示一下
翻译类吗?我想知道这是怎么解决的。
/**
* Genero
*
* @ORM\Table(name="genero")
* @ORM\Entity
* @Gedmo\TranslationEntity(class="Filmboot\PYSBundle\Entity\GeneroTranslation")
*/
class Genero