Как переопределить действие preUpdate, чтобы не изменять поле `updated_at` в Doctrine? - PullRequest
1 голос
/ 19 февраля 2010

Я хочу отключить автоматическое изменение поля «updated_at» при обновлении объекта.Я хочу сделать это вручную;или, по крайней мере, имейте возможность отключить его как хотите.

Я знаю, что могу сделать это, построив свое собственное поведение, как в этот замечательный ответ .Но я искал что-то более «чистое», изменяющее слушателя объекта.

  • Я пытался переопределить действие preUpdate () на модели.
  • Я пыталсячтобы отключить слушателей, и ничего:

-

Doctrine::getTable('Place')->getRecordListener()->setOption('disabled', true);
// or
Doctrine::getTable('Place')->getRecordListener()->setOption('disabled', array('preUpdate'));
// As reference, I've used these two lines on a Symfony Task

Есть еще идеи или код, чтобы посмотреть?

спасибо!

Ответы [ 4 ]

4 голосов
/ 01 марта 2012

Вы можете получить доступ к слушателю прямо с вашего объекта, например так:


  $listenerChain = $this->getListener();

  $i = 0;

  while ($listener = $listenerChain->get($i))
  {
    if ($listener instanceof Doctrine_Template_Listener_Timestampable)
    {
      $listener->setOption('disabled', true);
      break;
    }
    $i++;
  }     
3 голосов
/ 20 февраля 2010

в соответствии с документами на http://www.doctrine -project.org / Documentation / manual / 1_1 / nl / поведение: core-поведенческие свойства # timestampable , если вы хотите использовать Timestampable, но не обновленную его часть просто используйте:

Timestampable:
  updated:
    disabled: true

И добавьте свое собственное поле updated_at в разделе столбцов.

0 голосов
/ 23 февраля 2011
// get the first (in our case the timstampable) listener for the record
$timestampable = $record->getListener()->get(0);

// disable setting of created_at at the timestampable listener
$timestampable->setOption(array('created' => array('disabled' => true)));

проблема в том, что вы должны знать положение слушателя

вы также можете отключить всех слушателей следующим образом:

$record->getListener()->setOption('disabled',true);
0 голосов
/ 19 февраля 2010

Самый простой способ сделать это - переименовать поле updated_at во что-то другое. Так что это игнорируется Учением.

Таким образом, вы можете точно контролировать содержимое поля.

...