gpt4 book ai didi

php - 2 个表的 Doctrine 2 映射,错误

转载 作者:行者123 更新时间:2023-11-30 21:50:21 27 4
gpt4 key购买 nike

Zend Framework 3,Doctrine 2。我创建了 2 个表 MySQL 的一些映射

/**
* @ORM\Entity
* @ORM\Table(name="object")
*/
class Object
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(name="id")
*/
protected $id;

/**
* @ORM\OneToOne(targetEntity="..\Host", inversedBy="object")
* @ORM\JoinColumn(name="ip", referencedColumnName="IP")
*/
protected $host;

}

/**
* @ORM\Entity
* @ORM\Table(name="host")
*/
class Host
{
/**
* @ORM\Id
* @ORM\Column(name="IP")
*/
protected $ip;


/**
* @ORM\OneToOne(targetEntity="..\Object", mappedBy="host")
* @ORM\JoinColumn(name="IP", referencedColumnName="ip")
*/
protected $object;
}

我有这个错误:

Error "Missing value for primary key id on ..\Object".

为什么?好像是按照例子->5.3做的。一对一,双向,来自站点 Doctrine

最佳答案

您传递给 JoinColumn 的参数不正确。您可以查看 JoinColumn here 的文档.

像这样尝试:

// For Object class: 
// @ORM\JoinColumn(name="host_ip", referencedColumnName="ip")

// For Host class
// @ORM\JoinColumn(name="object_id", referencedColumnName="id")

除此之外:OneToOne 注释不支持 mappedBy。您可以使用 targetEntity 和 inversedBy,但不能使用 mappedBy。

另一方面,将 ip 作为主键似乎是错误的。您应该有一个自动生成的 Host 主 ID,并使用它来连接实体。您仍然可以将 ip 字段设置为唯一,这样就不会重复。另外,您没有任何其他字段,您甚至可以将 ip 放在 Object 类中。

此外,我不建议使用 Object 作为类名。太笼统了。

关于php - 2 个表的 Doctrine 2 映射,错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47574375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com