Doktrin benim `updated_at alanını değiştirmek değil Preupdate eylemi geçersiz nasıl?

4 Cevap php

Ben bir nesne güncellendiğinde 'updated_at' alanını değişen otomatik davranışı devre dışı bırakmak istiyorum. Ben elle yapmak istiyorum; ya da en azından, istediği gibi onu devre dışı bırakmak için olasılık var.

Ben this great answer olarak kendi davranışlarını kurarak bunu biliyorum. Ama nesnenin bir dinleyiciyi değiştirerek şey 'temiz' arıyordu.

  • Ben model üzerinde Preupdate () eylemi geçersiz denedim.
  • Ben dinleyici devre dışı bırakmak için çalıştı, ve hiçbir şey ettik:

-

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

Bakmak için daha fazla fikir veya kod?

teşekkürler!

4 Cevap

Eğer Timestampable kullanmak istiyorum ama eğer http://www.doctrine-project.org/documentation/manual/1_1/nl/behaviors:core-behaviors#timestampable de dokümanlar göre bunun güncelleştirilmiş kısmı sadece kullanmak değil:

Timestampable:
  updated:
    disabled: true

Ve sütunlar bölümünde kendi updated_at alanına ekleyin.

Bu gibi nesneden doğrudan dinleyici erişebilirsiniz:


  $listenerChain = $this->getListener();

  $i = 0;

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

Bunu yapmanın en basit yolu, başka bir şey için updated_at alanını yeniden adlandırmak olacaktır. Bu Doktrin tarafından göz ardı edilir böylece.

Bu şekilde, tam alanın içeriğini kontrol edebilirsiniz.

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

sorun dinleyici konumunu bilmek zorunda olduğunu

aynı zamanda tüm dinleyicilere bu şekilde devre dışı bırakabilirsiniz:

$record->getListener()->setOption('disabled',true);