Ich habe mehrere Schleifen wie:Doktrin updaten Einheit in Schleife, persistent oder Flush?
$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();
}
}
}
So, erhalte ich alle Wetten für ein Spiel, für jede Wette ich alle Geräte für den Benutzer gespeichert werden, und danach muss ich mit meinem Benutzer aktualisieren: $device->getUser()->setBadge($device->getUser()->getBadge() + 1);
Für jetzt spüle ich jedes Mal, aber ich denke, es gibt einen besseren Weg, Ideen?
Also, wenn ich eine neue Entität in meiner Schleife erstellen, muss ich persistieren, aber so sind alle aktualisierten Entitäten im Speicher? Wenn ich zweimal den gleichen Benutzer aktualisiere, ist das ok? –
Richtig, alles ist in Erinnerung. Ich habe gerade einen Link am Ende meiner Antwort hinzugefügt, um eine große Menge an Daten zu verarbeiten, und wenn Sie den Entitymanager erstellen müssen, wenn er existiert, verwenden Sie stattdessen 'EntityManager :: merge', siehe auch den Link in meiner Antwort. Sensio Labs Insight (Symfony Code Quality Analyzer) löst eine Warnung aus, wenn Sie innerhalb einer Schleife spülen. – chalasr