1

オブジェクトが更新されたときに「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 に答える 4

4

次のように、オブジェクトから直接リスナーにアクセスできます。


  $listenerChain = $this->getListener();

  $i = 0;

  while ($listener = $listenerChain->get($i))
  {
    if ($listener instanceof Doctrine_Template_Listener_Timestampable)
    {
      $listener->setOption('disabled', true);
      break;
    }
    $i++;
  }     
于 2012-03-01T11:29:53.157 に答える
3

http://www.doctrine-project.org/documentation/manual/1_1/nl/behaviors:core-behaviors#timestampableのドキュメントによると、Timestampable を使用したいが更新された部分を使用したくない場合は、次を使用します。

Timestampable:
  updated:
    disabled: true

そして、列セクションに独自の updated_at フィールドを追加します。

于 2010-02-20T00:18:14.997 に答える
0
// 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);
于 2011-02-23T13:25:54.520 に答える
0

これを行う最も簡単な方法は、updated_atフィールドの名前を別の名前に変更することです。Doctrine によって無視されるようにします。

そうすれば、フィールドの内容を正確に制御できます。

于 2010-02-19T09:18:13.317 に答える