Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.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 条令-事件侦听器(预更新)不更新相关实体_Php_Doctrine_Event Listener_Flush_Persist - Fatal编程技术网

Php 条令-事件侦听器(预更新)不更新相关实体

Php 条令-事件侦听器(预更新)不更新相关实体,php,doctrine,event-listener,flush,persist,Php,Doctrine,Event Listener,Flush,Persist,我有一个实体客户端,其中一个是链接实体电子邮件 class BusinessClientCustomer { /** * @var int * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @var string

我有一个实体客户端,其中一个是链接实体电子邮件

class BusinessClientCustomer
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     *
     * @ORM\Column(name="firstname", type="string", length=255, nullable=true)
     */
    protected $firstname;

    /**
     * @var string
     *
     * @ORM\Column(name="lastname", type="string", length=255, nullable=true)
     */
    protected $lastname;

    /**
     * @var ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="BusinessClientCustomerEmail", mappedBy="client_customer")
     */
    protected $emails;
在我的班级电子邮件中,我尝试通过EventListener(preUpdate或其他)检查只有一封默认为true的电子邮件

class BusinessClientCustomerEmail
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @var string
     *
     * @ORM\Column(name="email", type="string", length=255)
     */
    protected $email;

/**
     * @var boolean
     *
     * @ORM\Column(name="`default`", type="boolean")
     */
    protected $default;

    /**
     * @var BusinessClientCustomer
     *
     * @ORM\ManyToOne(targetEntity="BusinessClientCustomer", inversedBy="emails")
     */
    protected $client_customer;

public function __prePersist(EntityManager &$entityManager, ContainerInterface &$container) {
        var_dump('prePersist');
    }

    public function __postPersist(EntityManager &$entityManager, ContainerInterface &$container) {
        var_dump('postPersist');
    }

    public function __preUpdate(EntityManager &$entityManager, ContainerInterface &$container) {
        var_dump('preUpdate');
        if ($this->default) {
            foreach ($this->client_customer->getEmails() as $email) {
                if ($email->getId() !== $this->id) {
                    $email->setDefault(false);
                    $entityManager->persist($email);
                }
            }
        } else if (count($this->client_customer->getEmails()) === 1) {
            $this->setDefault(true);
        } else {
            $default = true;
            foreach ($this->client_customer->getEmails() as $email) {
                if ($email->getDefault()) {
                    $default = false;
                }
            }
            if ($default) {
                $this->setDefault(true);
            }
        }
    }

    public function __postUpdate(EntityManager &$entityManager, ContainerInterface &$container) {
        var_dump('postUpdate');
    }

    public function __preFlush(EntityManager &$entityManager, ContainerInterface &$container) {
        var_dump('preFlush');
        if ($this->default) {
            foreach ($this->client_customer->getEmails() as $email) {
                $email->setDefault(false);
                $entityManager->persist($email);
            }
        } else if (count($this->client_customer->getEmails()) === 0) {
            $this->setDefault(true);
        }
    }

    public function __postFlush(EntityManager &$entityManager, ContainerInterface &$container) {
        var_dump('postFlush');
    }

    public function __onFlush(EntityManager &$entityManager, ContainerInterface &$container) {
        var_dump('onFlush');
    }
当我用default=true(它是false)更新一封电子邮件时,这封电子邮件在db中得到了很好的更新,但其他电子邮件也保持default=true。或者在我的PreUpdate函数中(这就是所谓的-->我可以通过var_dump看到它),我使用default=false保存电子邮件。但这些电子邮件的数据库没有变化。怎么了?

你失踪了

$entityManager->flush()

在持续

之后,您将丢失

$entityManager->flush()


在持久化之后

我在放入flush()时遇到此错误:致命错误:未捕获错误:达到最大函数嵌套级别“256”,正在中止!inOk只是一个放错位置的flush()。我在放置flush()时遇到了这个错误:致命错误:未捕获错误:已达到最大函数嵌套级别“256”,正在中止!我想这只是一个错位的冲水()。