Дата доктрины при переопределении сохранения / перед сохранением

У меня есть модель Doctrine с полем даты "date_of_birth" (дата формы symfony), которое заполняется пользователем, все работает на 100%, оно сохраняется в БД, как и ожидалось, однако в методе сохранения() модели мне нужно получить значение это поле перед сохранением. Моя проблема в том, что при попытке получить значение даты он возвращает пустую строку, если это новая запись, и старое значение, если это существующая запись

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

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


person wikus verreynne    schedule 22.03.2010    source источник


Ответы (2)


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

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

   //do whatever you need

   parent::preSave($event);
}

В Doctrine 2.1 имена функций изменились.

person Benoit    schedule 22.03.2010
comment
Ссылки битые... :/ - person Carlos; 28.11.2016
comment
Также, Карлос, нет необходимости минусовать меня, потому что Doctrine Project не поддерживал свои ссылки на протяжении многих лет (уже 6 с половиной лет). - person Benoit; 12.12.2016

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

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

дополнительная информация о getModified()< /а>

person Mikołaj Kopras    schedule 14.07.2011