Symfony2-Doctrine2 继承持续无法正常工作


Symfony2-Doctrine2 inheritance persist not working properly

我在Symfony 2.3中有一个项目,使用Doctrine ORM 2.3.4,我正在使用类继承:

父类

/**
 * @ORM'Entity
 * @ORM'Table(name="parent")
 * @ORM'InheritanceType("JOINED")
 * @ORM'DiscriminatorColumn(name="discr", type="string")
 * @ORM'DiscriminatorMap({"child"="Child"})
 */
class Parent
{
   /**
    * @ORM'Column(name="id", type="integer")
    * @ORM'Id
    * @ORM'GeneratedValue(strategy="AUTO")
    */
   private $id;
   public function getId()
   {
      return $this->id;
   }
   // other fields & methods
}

和一个孩子一个

/**
 * @ORM'Entity
 * @ORM'Table(name="child")
 */
class Child extends Parent
{
   /**
    * @ORM'Column(name="id", type="integer")
    * @ORM'Id
    */
   private $id;
   public function getId()
   {
      return $this->id;
   }
}

当我保留子对象,刷新然后尝试检索子 id 时出现问题:

// ChildController::createAction
$em = $this->getDoctrine()->getManager();
$child = new Child();
// set child fields
$em->persist($child);
$em->flush();
$child->getId(); // <- not working

在数据库上,子行正确保存,如果我更改子方法getId

public function getId()
{
   return parent::getId();
}

它有效。

谁能向我解释一下?

非常感谢。

父实体需要为其子实体提供其属性的可见性。

将$id属性可见性更改为"受保护"。

有点晚了,但也许它可以帮助其他人。

当你看一下教义生成的表定义时,你就会明白为什么会这样。 例如,我的帖子:

...
CONSTRAINT fk_5d9f75a1bf396750 FOREIGN KEY (id)
      REFERENCES parent (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE CASCADE
...

如您所见,Doctrine 使用父表 id 作为子表 ID。就像@John卡特赖特说的那样,让你在父母中的$id受到保护。除此之外,仅在父级中定义吸气剂,一切正常。