MySQL Update mit Symfony

Es 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.