Doctrine 在循环中更新实体,持久还是刷新?

2024-01-15

我有多个循环,例如:

    $bets = $this->em->getRepository('AppBundle:Bet')->getBetsForMatch($match_id);

    foreach ($bets as $key => $bet) {
        $devices = $this->em->getRepository('AppBundle:Device')->findBy(array('user' => $bets->getUser()));

        foreach ($devices as $key => $device) {
            //HERE I SEND A PUSH NOTIFICATION

            if($this->rms_push->send($message)){
                $device->getUser()->setBadge($device->getUser()->getBadge() + 1);
                $this->em->flush();
            }
        }
    }

因此,我获得了一场比赛的所有投注,对于每次投注,我都会为用户保存所有设备,之后我需要使用以下内容更新我的用户:$device->getUser()->setBadge($device->getUser()->getBadge() + 1);

现在,我每次都会冲水,但我认为有更好的方法,想法?


你只需要一次冲洗,在你的循环之外:

foreach ($bets as $key => $bet) {
    $devices = $this->em->getRepository('AppBundle:Device')->findBy(array('user' => $bets->getUser()));

    foreach ($devices as $key => $device) {
        //HERE I SEND A PUSH NOTIFICATION

        if($this->rms_push->send($message)){
            $device->getUser()->setBadge($device->getUser()->getBadge() + 1);
        }
    }
}

$this->em->flush();

Calling $this->_em->persist($obj)涉及创建一个新条目。

如果您需要根据条目存在与否来创建或更新,请查看at EntityManager::merge http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/working-with-objects.html#merging-entities .

要保留大量条目的内存使用量,请查看批量处理 http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/batch-processing.html.

Note如果您的代码调用,SensioLabs Insight(PHP 源代码质量分析)会发出警告EntityManager::flush在一个循环内。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Doctrine 在循环中更新实体,持久还是刷新? 的相关文章

随机推荐