【问题标题】:Missing value for primary key id Doctrine Symfony2主键 ID Doctrine Symfony2 的缺失值
【发布时间】:2016-02-23 15:13:42
【问题描述】:

我正在研究交响乐 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;

【问题讨论】:

  • 在 SessionDesign 和 User 之间有两个“inversedBy”是故意的吗?
  • 不,不是故意的,我没听懂。不幸的是,尽管这并不能解决问题。
  • 您的问题仍然存在吗?
  • 是的,这不是解决办法。

标签: php mysql symfony doctrine-orm


【解决方案1】:

这是来自您协会的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")

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

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

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

【讨论】:

  • 那么是否可以使用两个非主键进行连接?
  • 好吧,我不明白的是 id 是 sessionDesign 的主键,而 fcid 是对它的外部引用。
  • 就是这样。连接列必须是非主键,但引用必须是。在 phpMyAdmin 中查看表的关系视图,您将看到:column "foo_id" => foreign key constraint => "bartable.id"。第一个是join,最后一个是引用(目标表的主键)。
  • 从您的第一个问题开始:是否可以使用两个非主键进行连接,不,这是不可能的。我误解了。你的问题也回答了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-31
  • 1970-01-01
相关资源
最近更新 更多