关系OneToOne与symfony3 / doctrine

时间:2016-08-01 14:14:46

标签: symfony inheritance doctrine

我尝试使用继承创建OneToOne关系:

abstract class A { }
class A1 extends A { }
class A2 extends A { }

class F {
    /**
     * @ORM\OneToOne( ? )
     */
    private $object; // Could be of type A1 or A2
}

我想这样做:

$f = $em->getRepository('MyBundle:F')->findExample();
$object = $f->getObject(); // Return instance of A1 or A2

应该使用哪些注释?

1 个答案:

答案 0 :(得分:0)

如果您有单向关系,这意味着您只需要一个包含A实体的F实体,那么您可以使用单向关系:

class F {

    /**
      * @ORM\OneToOne(targetEntity="A")
      * @ORM\JoinColumn(name="id_a", referencedColumnName="id")
      */
      private $a_object;
}

请注意,该关系是与A建立的,这意味着该对象可以是A1或A2中的任何一个。如果您需要双向,那么您也应该在A中添加注释:

class A {

    /**
     * @OneToOne(targetEntity="F", mappedBy="a_object")
     **/
    private $f_object;
}

另请注意,您可以反转F和A之间的两个注释,具体取决于您认为哪个是主要方面。请查看此links和此links以获取更多信息。

希望这对你有所帮助。