我正在研究交响乐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;
答案 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 question的the owner's answer(与完全相同的错误相关):
无法使用指向非主键的连接列。 Doctrine会认为这些是主键并使用数据创建延迟加载代理,这可能会导致意外结果。出于性能原因,Doctrine可以在运行时不验证此设置的正确性,而只能通过Validate Schema命令验证。
类似问题Is it possible to reference a column other than 'id' for a JoinColumn?