Zend Framework 2中的一对多映射与学说

时间:2013-04-15 14:48:00

标签: doctrine-orm zend-framework2

我正在尝试创建一个处理我的invoces的页面。我在一个表中有发票数据,在另一个表中有发票行。表格如下:

CREATE TABLE IF NOT EXISTS `Invoices` (
  `I_Id` int(10) NOT NULL AUTO_INCREMENT,
  `I_Number` int(4) NOT NULL,
  `I_ClientId` int(10) NOT NULL,
  `I_ExtraText` text NOT NULL,
  PRIMARY KEY (`I_Id`)
) ENGINE=InnoDB

CREATE TABLE IF NOT EXISTS `InvoiceRows` (
  `IR_Id` int(10) NOT NULL AUTO_INCREMENT,
  `IR_InvoiceId` int(10) NOT NULL,
  `IR_Price` int(10) NOT NULL,
  `IR_Vat` smallint(2) unsigned NOT NULL,
  `IR_Quantity` int(10) NOT NULL,
  `IR_Text` varchar(255) NOT NULL,
  PRIMARY KEY (`IR_Id`),
  KEY `IR_InvoiceId` (`IR_InvoiceId`)
) ENGINE=InnoDB

这是我的映射:

class Invoice {
    /**
     * @ORM\OneToMany(targetEntity="Row", mappedBy="invoice" ,cascade={"persist"})
     */
    protected $rows;
}

class Row {
    /**
     * @ORM\ManyToOne(targetEntity="Invoice", inversedBy="rows", cascade={"persist"})
     * @ORM\JoinColumn(name="IR_InvoiceId", referencedColumnName="I_Id")
     **/
    private $invoice;
}

我一直试图在doctrine docs上关注如何设置一对多双向映射的示例。然后,它与Zend Framework 2和form collections连接。拉数据非常好。我得到每张发票的所有行。

我的问题是当我想写回数据库并保存我的更改时。当我尝试保存时,我收到以下错误:

An exception occurred while executing 'INSERT INTO
MVIT_ADM__InvoiceRows (IR_InvoiceId, IR_Price, IR_Vat, IR_Quantity,
IR_Text) VALUES (?, ?, ?, ?, ?)' with params
{"1":null,"2":320,"3":0,"4":1,"5":"Learning your dog to sit"}:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column
'IR_InvoiceId' cannot be null

我做错了什么?检查post值中的数据时不为空。

修改:可在Github

找到完整来源

1 个答案:

答案 0 :(得分:0)

似乎IR_InvoiceId为null,它期望发票的Id(I_Id)值,因此请确保在InvoiceRows表中插入数据时,此处将Invoices(I_Id)值作为IR_InvoiceId传递,如提及表关系.. < / p>

祝你好运! 萨兰