使用Symfony和Doctrine,我有一个User
实体和一个Address
实体。每个用户可以有0个或更多的地址,其中一个是他的默认地址。如何使用事件侦听器与原则更改相关实体
因此,当我将默认地址从一个更改为另一个时,我应该将其中一个设置为默认值,其他地方不设为默认值(布尔型字段)。
我试图与事件侦听器,这样做所以当Address
实体更新我推出后更新的事件设置所有其他的地址非默认情况下,这样的事情:
class AddresssListener
{
public function postUpdate(LifecycleEventArgs $event)
{
$entity = $event->getEntity();
if ($entity instanceof Address) {
$this->changeDefaultAddress($entity, $event);
}
}
private function changeDefaultAddress($address, $event)
{
if ($address->getIsDefault() == true) {
foreach ($address->getUser()->getBillingDatas() as $another_address) {
if ($address != $another_address) {
$another_address->setIsDefault(false);
$em = $event->getEntityManager();
$em->persist($another_address);
}
}
}
}
}
代码正确执行并且不显示错误,但非默认地址的更改不会保存。
你是否知道你没有坚持你更新的对象?你更新了$ another_address,你坚持$ another_billing_data – jahller
嗨,对不起,我的错。我纠正了问题中的代码。是的,我persis another_address – petekaner
哪里是flush()方法?而且,为什么你每次在foreach循环中实例化em? – Srdjan