gpt4 book ai didi

symfony - Doctrine 在循环中更新实体、持久化还是刷新?

转载 作者:行者123 更新时间:2023-12-04 14:41:52 25 4
gpt4 key购买 nike

我有多个循环,如:

    $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();

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

如果需要根据条目是否存在创建或更新,请查看 at EntityManager::merge .

要为大量条目保留内存使用量,请查看 batch processing .

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

关于symfony - Doctrine 在循环中更新实体、持久化还是刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36040806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com