1

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

4

1 回答 1

0

您传递给 JoinColumn 的参数不正确。您可以在此处查看 JoinColumn 的文档。

试试这样:

// 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 设置为主键似乎是错误的。您应该有一个自动生成的主机主 ID,并使用它来连接实体。您仍然可以将您的 ip 字段设置为唯一的,因此您不会有重复项。另外,您没有任何其他字段,您甚至可以将 ip 放在 Object 类中。

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

于 2017-11-30T13:46:06.293 回答