Doctrine & Timestamps in Updates

Wenn man so am entwickeln ist, erfährt man manchmal seltsame Dinge. So habe ich heute versucht, ein datetime-Feld mit Doctrine Version 1 zu befüllen. Allerdings nicht mit NOW(), sondern mit einem noch zu berechnenden Wert. Das sah so aus:

Doctrine_Query::create()->update('Model_X')
      ->set(
        'datefield',
        'DATE_ADD(datefield, INTERVAL 1 MINUTE)'
      )
      ->where('ID = ?', $id)
      ->execute();

Es soll also einfach eine Minute auf das entsprechende Feld draufgerechnet werden. Leider funktioniert der obige Code nicht. Ersetzt man das execute() durch ein getSqlQuery(), so steht im erzeugten SQL-Statement nur noch DATE_ADD(datefield). Letzteres wiederum, ist keine gültige Syntax für MySQL.

Die Lösung ist so einfach wie trivial: Man nutzt einfach nicht DATE_ADD, sondern impliziete Typkonversion und lässt MySQL die Arbeit verrichten:

Doctrine_Query::create()->update('Model_X')
      ->set('datefield', 'datefield + INTERVAL 1 MINUTE')
      ->where('ID = ?', $id)
      ->execute();

Manchmal ist weniger eben mehr 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *