2010-03-22 3 views
6

У меня есть модель Доктрины с полем даты "date_of_birth" (дата формы symfony), которая заполняется пользователем, все работает на 100%, это экономит на дБ, как ожидалось, однако в модели 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); 
} 

Как я могу получить значение этого поля beore сохраняются данные

ответ

7

В доктрине 1.2 вы можете переопределить preSave псевдо-событие:

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

Ссылки сломанная ...:/ – Carlos

+0

Ok ссылки крепится к текущей документации – Benoit

+0

Также Карлос нет необходимости downvote на меня, потому что доктрина проект не выдерживал их связь на протяжении многих лет (6 и полтора года) – Benoit

2

Generaly псевдо-события я n doctrine использует «новые» значения, однако есть метод getModified(), и он делает именно то, что вам нужно.

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

Смежные вопросы