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

标签 php mysql doctrine-orm zend-framework3 doctrine-mapping

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/

相关文章:

php - 在html站点中选择一个月并只读取从mysql中选择的月份

php - 如何在 PHP 中使用 mysql 循环和 xlsxwriter php 导出到 Excel 工作表

android - 下载的图像可以显示,但托管服务器保存的图像无法在 Android 中显示

PHP set Hash 与 Swift 应用程序的 Checked hash 不同

php - 选择代码点火器模型的最大值时出错

php - Symfony DI : Circular service reference with Doctrine event subscriber

php - Doctrine - 更新事件监听器内的多对多关联

sql - 教义2.1,其中外键id = ?,编辑: Fixed in Doctrine 2. 2

php - Bootbox.js 提交表单前确认选择

mysql - 配置 JDBC Glassfish