缺少主键ID Doctrine Symfony2

时间:2016-02-23 15:13:43

标签: php mysql symfony doctrine-orm

我正在研究交响乐2.8.2中的两个实体之间的联接。我一直得到"缺少主键ID"

的价值

下面是缺少id的id注释。

 /**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

以下是我的加入:

/**
 * @ORM\OneToOne(targetEntity="FYP\BaseDesignBundle\Entity\SessionDesign", inversedBy="user")
 * @ORM\JoinColumn(name="fcid", referencedColumnName="id")
 */
private $sessionDesign;


/**
 * @ORM\OneToOne(targetEntity="FYP\UserBundle\Entity\User", inversedBy="sessionDesign")
 * @ORM\JoinColumn(name="id", referencedColumnName="fcid")
 */
private $user;

1 个答案:

答案 0 :(得分:5)

来自您关联的joinColumn名称的错误。

将映射更改为:

/**
 * @ORM\OneToOne(targetEntity="FYP\UserBundle\Entity\User", inversedBy="sessionDesign")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
private $user;

注意:这是默认配置,也可以删除该行,因为它没用。

修改

我没有指出真正的问题,我是对的 您收到此错误的原因是您尝试使用不是主键的列作为referencedColumnName的{​​{1}}

以下内容:

joinColumn

应该是:

* @ORM\JoinColumn(name="id", referencedColumnName="fcid")

来自this similar questionthe owner's answer(与完全相同的错误相关):

  

无法使用指向非主键的连接列。 Doctrine会认为这些是主键并使用数据创建延迟加载代理,这可能会导致意外结果。出于性能原因,Doctrine可以在运行时不验证此设置的正确性,而只能通过Validate Schema命令验证。

     

类似问题Is it possible to reference a column other than 'id' for a JoinColumn?