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;
}
我有这个错误:
错误"在.. \ Object"。
上缺少主键ID的值
为什么呢?它似乎是根据例子完成的 - > 5.3。来自网站Doctrine的一对一,双向
答案 0 :(得分:0)
传递给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作为您的班级名称。这太笼统了。