2

Doctrine ORM 2.3.4を使用してSymfony 2.3にプロジェクトがあり、クラス継承を使用しています:

親クラス

/**
 * @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
}

と子供 1

/**
 * @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();
}

できます。

誰か私にこれを説明してもらえますか?

どうもありがとう。

4

2 に答える 2

3

親エンティティは、そのプロパティの可視性をその子に与える必要があります。

$id プロパティの可視性を「保護」に変更します。

于 2013-10-08T17:57:16.040 に答える