Php 在preUpdate LifecycleCallback中保留另一个实体
我有这个Php 在preUpdate LifecycleCallback中保留另一个实体,php,orm,doctrine-orm,doctrine,zend-framework2,Php,Orm,Doctrine Orm,Doctrine,Zend Framework2,我有这个用户实体 /** * User Entity. * * @ORM\Entity * @ORM\Table(name="user") * @ORM\Entity(repositoryClass="Application\Repository\UserRepository") * @ORM\HasLifecycleCallbacks() * @ORM\EntityListeners({"Application\Listener\User"}) */ class User ex
用户
实体
/**
* User Entity.
*
* @ORM\Entity
* @ORM\Table(name="user")
* @ORM\Entity(repositoryClass="Application\Repository\UserRepository")
* @ORM\HasLifecycleCallbacks()
* @ORM\EntityListeners({"Application\Listener\User"})
*/
class User extends Entity implements UserInterface, ProviderInterface
{
...
/**
* @var \Application\Entity\Organization
*
* @ORM\ManyToOne(targetEntity="Application\Entity\Organization")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="organization_id", referencedColumnName="organization_id")
* })
*/
protected $organization;
...
}
Wich使用侦听器
namespace Application\Listener;
use Doctrine\ORM\Event\PreUpdateEventArgs;
class User
{
public function preUpdate(\Application\Entity\User $user, PreUpdateEventArgs $eventArgs)
{
if ($eventArgs->hasChangedField('organization')) {
$oldOrganization = $eventArgs->getOldValue('organization');
if ($oldOrganization) {
$oldOrganization->decreaseTotalMembers();
$eventArgs->getEntityManager()->persist($oldOrganization);
}
$newOrganization = $eventArgs->getNewValue('organization');
if ($newOrganization) {
$newOrganization->increaseTotalMembers();
$eventArgs->getEntityManager()->persist($newOrganization);
}
}
}
}
因此,正如您所看到的,每次用户更改组织时,我都希望减少旧组织中的成员数量,增加新组织中的成员数量
因此,在控制器中,当我创建一个组织时,我有:
public function createAction(){
...
$this->getOrganizationService()->hydrateOrganization($organization, $data);
$user = $organization->getAuthor();
if (!$user->hasOrganization()) {
$user->setOrganization($organization);
$this->getUserService()->saveUser($user);
}
...
}
因此,我希望在保存用户(persist+flush)时,组织成员总数的增加也会被刷新,但不会发生
你知道为什么会发生这种情况以及如何解决它吗 如果刷新触发了预更新,那么我认为就不会有刷新将触发器内的更改写入数据库。如果使用“inversedBy”,则会有多个一元关系在该关系上,并在组织实体上创建add和remove方法,您可以只计算组织中的用户数,无需预更新,但我不想每次都计算,我只想简单地跟踪成员数,这就是我有一个附加参数的原因。