[GORM] Stabelbearbeitung?

Im Entwickler-Forum können Implementierungsdetails sowie Alternativen der Umsetzung diskutiert werden. // Here, developers can discuss implementation details of features of their projects.
Antworten
Benutzeravatar
Paric
Beiträge: 45
Registriert: 25.08.2014, 08:51:04

[GORM] Stabelbearbeitung?

Beitrag von Paric » 10.10.2014, 12:36:34

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

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: [GORM] Stabelbearbeitung?

Beitrag von dr.e. » 10.10.2014, 12:44:14

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.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste