Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在preUpdate LifecycleCallback中保留另一个实体_Php_Orm_Doctrine Orm_Doctrine_Zend Framework2 - Fatal编程技术网

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方法,您可以只计算组织中的用户数,无需预更新,但我不想每次都计算,我只想简单地跟踪成员数,这就是我有一个附加参数的原因。