0

請求書を処理するページを作成しようとしています。あるテーブルに請求書データがあり、別のテーブルに請求書の行があります。テーブルは次のようになります。

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;
}

私は、1対多の双方向マッピングをセットアップする方法について、 doctrine docsの例に従おうとしています。次に、これを Zend Framework 2 とフォーム コレクションに接続します。データのプルは非常にうまく機能します。各請求書のすべての行を取得します。

私の問題は、データベースに書き戻して変更を保存したいときです。保存しようとすると、次のエラーが表示されます。

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

私は何を間違えましたか?投稿値からデータを確認するときは空ではありません。

編集: 完全なソースはGithubで見つけることができます

4

1 に答える 1

0

IR_InvoiceId null のようです。Invoices (I_Id) 値の Id が必要です。そのため、InvoiceRows テーブルにデータを挿入しているときに、テーブルの関係に言及したときに Invoices (I_Id) 値を IR_InvoiceId として渡すようにしてください。

頑張ってください!サラン </p>

于 2013-04-17T07:24:25.707 に答える