缺失主键id的值 Doctrine Symfony2

7

我正在对Symfony 2.8.2中Doctrine中的两个实体进行连接。我一直收到"缺少主键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;

你在SessionDesign和User之间有两个"inversedBy"是有意为之的吗? - hasumedic
不,这不是故意的,我没有注意到。不幸的是,这并不能解决问题。 - Jeremy
你的问题还在持续吗? - chalasr
是的,那不是解决方案。 - Jeremy
symfony,不是symphony,可能是这样的。 - undefined
1个回答

9

这是一个关于你的关联中 joinColumn 名称的错误。

请将你的映射更改为:

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

注意:这是默认配置,此行也可以删除,因为它没有用处。
编辑:
我没有指出真正的问题就已经正确了。 您之所以会收到此错误,是因为您尝试使用非主键列作为joinColumnreferencedColumnName
以下是:
* @ORM\JoinColumn(name="id", referencedColumnName="fcid")

应该是:

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

来自这个类似的问题,答案在所有者的回答(与完全相同的错误相关):

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

类似的问题是否可以引用除'id'以外的列作为JoinColumn?


1
那么,能否使用两个非主键进行连接呢? - Jeremy
我不理解的是,id是sessionDesign的主键,而fcid是对它的外键引用。 - Jeremy
这就是了。连接列必须是非主键,但引用必须是主键。查看phpMyAdmin中表的关系视图,您将看到:列“foo_id”=>外键约束=>“bartable.id”。第一个是连接,最后一个是引用(目标表的主键)。 - chalasr
1
从你的第一个问题:是否可以使用两个非主键进行连接,不,这是不可能的。我误解了。那么你的问题得到了回答吗? - chalasr
唯一的方法是通过将引用列设置为 #[ORM\Id] 来“破解”它,但这显然并不总是可行的。 - jave.web

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接