Doctrine扩展可扩展类

时间:2017-04-13 15:05:39

标签: php symfony doctrine-orm

我对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;

    ...
}

有什么想法吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

最后,它适用于“JOINED”表。将single_table更改为连接有点困难,但它有效。

相关问题