Seite 1 von 1

[GORM] Stabelbearbeitung?

Verfasst: 10.10.2014, 12:36:34
von Paric
Hallo,

ich habe gerade ein Problem mit meinem Skript, und hoffe das Ihr mir einen Zaunpfahl zur Lösung geben könnt. Ich versuche mein Problem einfach mal zu beschreiben:

In einem bestimmten Teil meiner Anwendung muss ich ein Feld in meiner User-Tabelle ändern, und das aber bei allen Usern. Im Moment habe ich das so gelöst:

Code: Alles auswählen

foreach ($this->loadUserList() as $usr)
            {
                $rechte = $usr->getRechteString($sb);
                $add = ($usr->getId() == 1)? "F" : "0";
                $usr->setRechteString($sb, $rechte);

                $done[] = $this->saveUser($usr);
            } 
das sollte reichten um zu verdeutlichen wie mein Skript an der Stelle arbeiten soll. Wenn ich nur einen User bearbeite, so läuft das ganze einwandfrei. Bei 5 auch kein Problem. Allerdings handelt es sich hierbei um ca. 80 Nutzer, und da sind es anscheind zu viele Datenbank-Aufrufe in zu kurzer Zeit, da jeder Nutzer einzeln eingetragen wird.
Gibt es eine Möglichkeit sowas in der Art wie:

Code: Alles auswählen

$oRM->saveObjects($arr); 
?

Also das der Gorm einen update-insert-string aus allen Objekten aus einem Array zusammenbastelt und dies dann als ein SQL-Befehl zur Datenbank schießt?
Oder gibt es eine andere Möglichkeit?
Ich hoffe ich konnte mich so halbwegs klar ausdrücken wo mein Problem liegt.

Beste Grüße,
Pit

Re: [GORM] Stabelbearbeitung?

Verfasst: 10.10.2014, 12:44:14
von dr.e.
Hi Pit,
Ich hoffe ich konnte mich so halbwegs klar ausdrücken wo mein Problem liegt.
Absolut!
Also das der Gorm einen update-insert-string aus allen Objekten aus einem Array zusammenbastelt und dies dann als ein SQL-Befehl zur Datenbank schießt?
Das kann der GORM leider nicht. Er verarbeitet auf Basis der Objekt-orientierten API Objekte oder Objekt-Graphen direkt ohne eine weitere Abstraktions-Schicht. Demnach kannst du die erzeugten Statements nicht zwischendurch abfangen. Einzige Option ist, eine Speicherung bei eingeschaltetem Debug-Logging auszuführen und die Statements aus dem Log zu ziehen um dann ein Skript zu schreiben, dass das automatisch an Hand einer Liste von Statements durchführt.
Oder gibt es eine andere Möglichkeit?
Für Massen-Daten-Verarbeitung würde ich persönlich versuchen, die Operationen möglichst weit in die Datenbank zu verlagern. Bedeutet: entweder Skript mit SQL-Statements oder sogar eine Stored Procedure.