作为外键的Doctrine 2复合主键

时间:2017-01-12 10:18:40

标签: doctrine-orm symfony

我将ClassA映射到具有ManyToOne关系的实体ClassB(到目前为止简单)。

class ClassA{
    /**
     * @var string
     * @ORM\Id
     * @ORM\Column(name="keyA", type="string", length=255)
     */
    private $keyA;


    /**
     * @var ClassB $classB
     * @ORM\ManyToOne(targetEntity="ClassB", inversedBy="classAs")
     * @ORM\JoinColumns({
     *  @ORM\JoinColumn(name="ClassB_keyB", referencedColumnName="keyB")
     * })
     */
    private $classB;
}

这是ClassB

class ClassB{
    /**
     * @var string
     * @ORM\Id
     * @ORM\Column(name="keyB", type="string", length=255)
     */
 private $keyB;

    /**
     *
     * @var ClassC $classC
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="ClassC", inversedBy="classBs")
     * @ORM\JoinColumns({
     *  @ORM\JoinColumn(name="ClassC_keyC", referencedColumnName="keyC")
     * })
     */
    private $classC;

    /**
     * @var ArrayCollection $classAs
     * @ORM\OneToMany(targetEntity="ClassA", mappedBy="classB")
     */
    private $classAs;
}

您可以注意到ClassB包含复合主键(2个实体和列) 这是ClassC

class ClassC{
    /**
     * @var string
     * @ORM\Id
     * @ORM\Column(name="keyC", type="string", length=255)
     */
    private $keyC;


    /**
     * @var ArrayCollection $classBs
     * @ORM\OneToMany(targetEntity="ClassB", mappedBy="classC")
     */
    private $classBs;
}

当我尝试显示ClassA的所有实体时(使用findAll())我得到此异常Missing value for primary key classC on ERP\................\ClassB

我在这里缺少什么?!

1 个答案:

答案 0 :(得分:1)

您必须在ClassARepository中创建自己的方法并添加连接列