我有多个循环,如:
$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);
现在,我每次冲洗,但我认为有更好的方法,想法?
答案 0 :(得分:7)
你的循环中只需要一次冲洗:
512MB
调用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();
涉及创建新条目。
如果您需要创建或更新,具体取决于条目是否存在,请查看at EntityManager::merge
。
要保留大量条目的内存使用量,请查看batch processing。
注意如果您的代码在循环内调用$this->_em->persist($obj)
,SensioLabs洞察(PHP源代码质量分析)会发出警告。