Symfony 原则2多人关系问题

Symfony 原则2多人关系问题,symfony,orm,doctrine-orm,associations,yaml,Symfony,Orm,Doctrine Orm,Associations,Yaml,我有两个实体,发票和销售税。最近,我的团队决定从2.1升级到Symfony 2.3。正因为如此,我们不得不重写很多进行查询的方法,一些没有关系的实体需要它们 在更新之前,我的发票和增值税记录是通过获取交易id日期“U”创建的;使用相同的事务id设置这两个表,这两个表也有一个主索引id 所以你可以想象它是这样的: 销售税:id、交易记录id、金额 发票:id、交易记录id、金额 因此,当我查询它们时,我只是在事务id上加入。现在,如果没有关系,则加入不起作用,因此我必须更新它以建立关系。但当我去创

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

在更新之前,我的发票和增值税记录是通过获取交易id日期“U”创建的;使用相同的事务id设置这两个表,这两个表也有一个主索引id

所以你可以想象它是这样的: 销售税:id、交易记录id、金额 发票:id、交易记录id、金额

因此,当我查询它们时,我只是在事务id上加入。现在,如果没有关系,则加入不起作用,因此我必须更新它以建立关系。但当我去创建发票或增值税记录时,我得到了以下错误:注意:未定义索引:C:\folders\vendor\doctrine\orm\lib\doctrine\orm\Persisters\basicnitypersister.php第539行中的transactionId

代码中的增值税记录创建得很好,但创建发票时失败:

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
销售税:

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表示一个订单,每行仅表示一个行项目。因此,该发票实体在某个时候可能需要一个自引用关系。

您的SalesTax实体是否有transactionId字段?它的索引名为transactionId,但如果我将其用作字段,它也不起作用。最后,我通过单独考虑销售税来解决这个问题,这意味着在某些页面上会有更多的查询,但我认为现在还可以。