我使用Symfony产品表单。这可以由用户更改。用户保存表单后,我想知道产品中是否有任何更改。
表单使用产品的实体。该产品与实体价格呈一对一关系。由于存在着多重一对一的关系,价格为折扣等。价格实体有一组数据,如priceType
、currency
和value
。
是一个一对一的单向,只有从产品到价格。产品实体有以下注释:
/**
* @ORM'OneToOne(targetEntity="Price")
* @ORM'JoinColumn(name="price_sales_id", referencedColumnName="id")
*/
private $priceSales;
保存并验证表单后,我使用以下代码进行比较:
$uow = $em->getUnitOfWork();
$uow->computeChangeSets();
$changeSet = $uow->getEntityChangeSet($product);
$changeSet
对象返回产品中所做的更改,但不返回在一对一关系中所做的更改。是否有一种方法可以检测相关实体中的变化?
首先,不要使用computeChangeSets()
,因为你要修改UnitOfWork
,这可能会造成很大的麻烦。
第二,我很确定Product
是你和Price
关系的inversedSide
(你可以通过检查注释来验证:如果你把mappedBy
变成了Product
的price
注释,那么你就变成了inversedSide
)。
Doctrine只查找关系的owningSide
(inversedBy
注释)的变化。
一旦你切换了这些边,你可以computeChangeSets
(我真的建议不要这样做)或做任何你需要做的。
对我来说,最好的策略(不涉及切换关系的各个方面,即使您应该停下来重新考虑各个方面是否正确)是实现Doctrine实体侦听器并侦听preUpdate
事件