我对Doctrine Extension Translatable有问题,我希望在这里找到解决方案。
我有2个类:cardItem和Dish在一个表中。两者都实现了Translatable和Dish扩展CardItem。
第一个问题:我是否需要为Dish类实施“Translatable”?
这是一个不起作用的小测试,我不知道为什么:
$em = $this->getDoctrine()->getManager();
$repository = $em->getRepository('Project\MyBundle\Entity\Translation\CardItemTranslation');
$dishManager = $this->get('dish_manager');
$dish = $dishManager->find(1);
$repository->translate($dish, 'name', 'en_GB', 'content in english')
->translate($dish, 'description', 'en_GB', 'description in english');
$em->persist($dish);
$em->flush();
我有一个错误:“未捕获的PHP异常Gedmo \ Exception \ InvalidArgumentException:”实体:Project \ MyBundle \ Entity \ Dish不翻译字段 - 描述“
CardItem.php
use Gedmo\Mapping\Annotation as Gedmo;
use Gedmo\Translatable\Translatable;
/**
* CardItem
*
* @ORM\Table(name="card_item", indexes={@ORM\Index(name="index_inserted_at", columns={"inserted_at"})})
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap( {"dish" = "Dish"} )
* @ORM\Entity(repositoryClass="Project\MyBundle\Repository\CardItemRepository")
* @Gedmo\TranslationEntity(class="Project\MyBundle\Entity\Translation\CardItemTranslation")
* @ExclusionPolicy("all")
*/
abstract class CardItem implements Translatable {
/**
* @var int
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
* @Expose
*/
protected $id;
/**
* @var string
*
* @Gedmo\Translatable
* @ORM\Column(name="name", type="string", length=200, nullable=true)
* @Expose
*/
protected $name;
/**
* @var string
*
* @Gedmo\Translatable
* @ORM\Column(name="description", type="text", length=65535, nullable=true)
* @Expose
*/
protected $description;
[...]
}
Dish.php
/**
* Dish.
* @ORM\Entity
* @ORM\Entity(repositoryClass="Project\MyBundle\Repository\DishRepository")
* @Gedmo\TranslationEntity(class="Project\MyBundle\Entity\Translation\CardItemTranslation")
*/
class Dish extends CardItem implements Translatable
{
/**
* @var string
*
* @Gedmo\Translatable
* @ORM\Column(name="button_label", type="string", length=500, nullable=true)
* @Expose
*/
private $buttonLabel;
...
}
有什么想法吗?
非常感谢!
答案 0 :(得分:0)
最后,它适用于“JOINED”表。将single_table更改为连接有点困难,但它有效。