2010-03-22 4 views
6

Ich habe Doctrine Modell mit einem Datumsfeld "date_of_birth" (symfony form date), das vom Benutzer ausgefüllt wird, funktioniert 100% in der db wie erwartet, jedoch im Modell gespeichert save() Methode Ich muss den Wert dieses Felds abrufen, bevor der Speichervorgang ausgeführt wird. Mein Problem ist, dass Beim Versuch, den Datumswert, um es leeren String zurück, wenn es ein neuer Rekord und der alte Wert, wenn es ein vorhandener DatensatzDoctrine date in save override/vor dem Speichern

public function save(Doctrine_Connection $conn = null) 
{ 
     $dob = $this->getDateOfBirth(); // returns empty str if new and old value if existing 
     $dob = $this->date_of_birth; //also returns empty str 

     return parent::save($conn); 
} 

ist, wie kann ich den Wert dieses Feldes abrufen beore Daten gespeichert

Antwort

7

In Lehre 1.2 Sie preSave Pseudo-Ereignis überschreiben können:

// In your model class 
public function preSave($event) { 
    $dob = $this->getDateOfBirth(); 

    //do whatever you need 

    parent::preSave($event); 
} 
i

In Doctrine 2.1 the function names changed.

+0

Links über Link ...:/ – Carlos

+0

Ok Links zu aktuellen docs festen – Benoit

+0

Auch Carlos gibt es keine Notwendigkeit für mich, weil Lehre downvote Projekt nicht ihre Verbindungen im Laufe der Jahre halten (6 und ein halbes Jahr jetzt) ​​ – Benoit

2

Generaly Pseudo-Ereignisse n Doktrin verwendet "neue" Werte, jedoch gibt es getModified() -Methode und es tut genau das, was Sie brauchen.

$modifiedFields = $this->getModified(true); 
if(isset($modifiedFields['date_of_birth'])) { //index is available only after change 
    echo $modifiedFields['date_of_birth']; //old value 
} 

more info from doc about getModified()