2010-03-22 10 views
6

J'ai un modèle Doctrine avec un champ de date "date_of_birth" (date du formulaire symfony) qui est rempli par l'utilisateur tout fonctionne 100% il enregistre à la db comme prévu, mais dans le modèle save() méthode J'ai besoin de récupérer la valeur de ce champ avant l'enregistrement. Mon problème est que en essayant d'obtenir la valeur de la date elle renvoie une chaîne vide si son un nouveau record et l'ancienne valeur si elle est un enregistrement existantDoctrine date en save override/before save

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); 
} 

Comment puis-je récupérer la valeur de ce champ beore les données sont sauvegardées

Répondre

7

Dans Doctrine 1.2, vous pouvez remplacer preSave pseudo-événement:

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

    //do whatever you need 

    parent::preSave($event); 
} 

In Doctrine 2.1 the function names changed.

+0

liens cassés ...:/ – Carlos

+0

liens Ok fixés sur docs en cours – Benoit

+0

également Carlos il n'y a pas besoin de downvote sur moi parce que la doctrine du projet n'a pas maintenu leurs liens au fil des ans (6 et un demi-années maintenant) – Benoit

2

pseudo-événements generaly i n doctrine utilise de "nouvelles" valeurs, mais il existe une méthode getModified() et elle fait exactement ce dont vous avez besoin.

$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()