2010-03-22 7 views
6

Tengo el modelo de Doctrine con un campo de fecha "date_of_birth" (fecha de formulario symfony) que el usuario rellena todo funciona 100% lo guarda en el db como se esperaba, sin embargo en el modelo El método save() Necesito recuperar el valor de este campo antes de que se produzca el guardado. Mi problema es que Al tratar de obtener el valor de fecha devuelve cadena vacía si es un nuevo registro y el valor de edad si es un registro existenteDoctrine date in 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); 
} 

¿Cómo puedo recuperar el valor de este campo beore se guardan los datos

Respuesta

7

En Doctrina 1.2 se puede anular preSave pseudo-evento:

// 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

enlaces rotos ...:/ – Carlos

+0

enlaces Ok fijados a documentos actuales – Benoit

+0

También Carlos no hay necesidad de downvote en mí porque Doctrina Proyecto no mantuvo sus vínculos a lo largo de los años (6 y un medio años ahora) – Benoit

2

generaly pseudoacontecimientos i n doctrine usa valores "nuevos", sin embargo, hay un método getModified() y está haciendo exactamente lo que necesita.

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