Doctrine2类表继承 - 什么是正确的语法?

时间:2013-09-17 08:21:18

标签: php symfony doctrine-orm

当我使用类表继承时,Doctrine 2会重复子类中的父类属性。

示例:

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="Entity\MyParentRepository")
 * @ORM\Table(name="my_parent")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({"my_child" = "MyChild"})
 */
class MyParent
{
  /**
   * @ORM\Id
   * @ORM\Column(type="integer")
   * @ORM\GeneratedValue(strategy="AUTO")
   */
  protected $id;

  /**
   * @ORM\Column(type="string", length=100)
   */
  protected $code;
}

/**
 * @ORM\Entity(repositoryClass="Entity\MyChildRepository")
 * @ORM\Table(name="my_child")
 */
class MyChild extends MyParent
{
  /**
   * @ORM\Column(type="string", length=100)
   */
  protected $name;
}

当我调用doctrine:generate:entities时,MyChild类更改为:

/**
 * @ORM\Entity(repositoryClass="Rail\RussiaBundle\Entity\MyChildRepository")
 * @ORM\Table(name="my_child")
 */
class MyChild extends MyParent
{
  /**
   * @ORM\Column(type="string", length=100)
   */
  protected $name;

  /**
   * @var integer
   */
  private $id;

  /**
   * @var string
   */
  private $code;
}

(我省略了生成的方法)


因此,如您所见,属性$ id和$ code被复制到MyChild类。

我做错了什么? 类表继承的正确语法是什么?

我使用Doctrine 2.3.4

2 个答案:

答案 0 :(得分:1)

如果您将受保护的字段更改为私有,则会有所帮助。

答案 1 :(得分:0)

没关系。你可以删除重复的东西,当然如果你不想修改它。