MySQL Update mit Symfony
Mittwoch, 18. Juni 2008Es gibt mehrere Möglichkeiten mit dem PHP Framework Symfony mehrere Zeilen einer Datenbank (in unserem Fall MySQL) zu updaten.
Nehmen wir den Befehl:
UPDATE user SET active=0 WHERE password=1234
Die erste (und offensichtliche) Möglichkeit lautet, alle User mit dem Passwort ‘1234′ mithilfe eines Criteria auszulesen – um dann mittels einer foreach Schleife einzelnt die Datensätze durchlaufen und upzudaten.
Allerdings verbraucht diese Möglichkeit unnötig viel Resourcen, weil X+1 SQL-Querys ausgeführt werden.
Um dieses zu vermeiden, gibt es einen schöneren Weg über die BasePeer Class von Symfony:
$con = Propel::getConnection();
// — Select Anweisung (steht also im WHERE Teil)
$c_select = new Criteria();
$c_select->add(UserPeer::ACTIVE, 0);
// — Eigentliche Update Anweisung
$c_update = new Criteria();
$c_update->add(UserPeer::PASSWORD, 1234);
BasePeer::doUpdate($c_select, $c_update, $con);
Mittels diesen kleinen Symfony Snippets ist es also Möglich, schnell mehrere Zeilen in einer Tabelle Resourcen schonend zu updaten.
Im oberen Beispiel wird nämlich genau 1 Query ausgeführt. Also haben wir eine Erspannis von X MySQL- Querys.