ドクトリンで私の「更新された_AT」フィールドを変更しないように、事前継続アクションをオーバーライドする方法は?

StackOverflow https://stackoverflow.com/questions/2292897

質問

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

これ以上のアイデアや、見るべきコードはありますか?

ありがとう!

役に立ちましたか?

解決

でドキュメントによると http://www.doctrine-project.org/documentation/manual/1_1/nl/behaviors:core-behaviors#timestampable タイムスタンプラブルを使用したいが、更新された部分を使用したい場合は、次のものを使用するだけです。

Timestampable:
  updated:
    disabled: true

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

他のヒント

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


  $listenerChain = $this->getListener();

  $i = 0;

  while ($listener = $listenerChain->get($i))
  {
    if ($listener instanceof Doctrine_Template_Listener_Timestampable)
    {
      $listener->setOption('disabled', true);
      break;
    }
    $i++;
  }     

これを行う最も簡単な方法は、 updated_at 他の何かへのフィールド。教義によって無視されるように。

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

// 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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top