主义2 manyToOne关系问题

时间:2013-07-30 15:03:06

标签: symfony orm doctrine-orm associations yaml

我有两个实体,发票和销售税。最近我的团队决定从2.1升级到Symfony 2.3。由于这个原因,我们不得不重写我们进行查询的很多方法,并且一些没有关系的实体需要拥有它们。

在更新之前,我的发票和销售税记录是通过获取交易ID date('U');并使用相同的交易ID设置两者来创建的(两个表都有主索引ID)。

所以你可以想象它看起来像这样: 销售税:id,transaction_id,金额 发票:id,transaction_id,金额

所以当我查询他们时,我刚加入了交易ID。现在连接不能没有关系,所以我必须更新它以建立关系。但是,当我创建发票或销售税记录时,我收到此错误:Notice: Undefined index: transactionId in C:\folders\vendor\doctrine\orm\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php line 539

在代码中创建销售税记录就好了,但是当它创建发票时它失败了:

public function insertSalesTax($transactionId, $amount)
{
    $tax = new SalesTax();

    $tax->setAmount($amount);
    $tax->setTransactionId($transactionId);

    $this->entityManager->persist($tax);
    $this->entityManager->flush();

    return $tax;
}

插入,但随后我拿下税务记录并尝试创建发票:

    $invoice = new Invoice();
    $em = $this->entityManager;

    $invoice //omitted other invoice data
        ->setSalesTax($salesData['salesTax']);

    $em->persist($invoice);
    $em->flush();

以下是我在yml中的映射的相关部分:

Bundle\Entity\Invoice:
  type: entity
  table: invoices
  indexes:
    transactionId:
      columns: [ transaction_id ]
  id:
    id:
      type: integer
      generator: { strategy: AUTO }
  manyToOne:
    salesTax:
      targetEntity: SalesTax
      inversedBy: invoice
      joinColumn:
        name: transaction_id
        referencedColumnName: transaction_id

和SalesTax:

Bundle\Entity\SalesTax:
  type: entity
  table: sales_taxes
  indexes:
    transactionId:
      columns: [ transaction_id ]
  id:
    id:
      type: integer
      generator: { strategy: AUTO }
  oneToMany:
    invoice:
      targetEntity: Invoice
      mappedBy: salesTax

如果您想知道为什么oneToMany,那是因为发票存储为单独的订单项。可能有许多具有相同交易ID的发票。发票表中的一个交易ID代表一个订单,每行仅代表一个订单项。因此,此发票实体可能在某些时候需要自我引用关系。

0 个答案:

没有答案