我有两个实体,发票和销售税。最近我的团队决定从 2.1 升级到 Symfony 2.3。因此,我们不得不重写很多查询方式,并且一些没有关系的实体需要它们。
在更新之前,我的发票和销售税记录是通过获取交易 IDdate('U');
并使用相同的交易 ID 设置创建的(两个表也有一个主索引 ID)。
所以你可以想象它看起来像这样: Sales Tax: id, transaction_id, amount Invoice: id, transaction_id, amount
因此,当我查询他们时,我只是加入了交易 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
和销售税:
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 的发票。invoices 表中的一个交易 ID 代表一个订单,每一行仅代表一个行项目。所以这个发票实体在某些时候可能需要一个自引用关系。