Comment remplacer l'action PreUpdate de ne pas modifier mon champ `updated_at` dans Doctrine?

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

Question

Je veux désactiver le comportement automatique de changer le champ « updated_at » lorsqu'un objet est mis à jour. Je veux le faire manuellement; ou tout au moins, ont la posibilité de le désactiver comme voulu.

Je sais que je peux le faire en construisant mon propre comportement comme dans cette grande réponse . Mais je cherchais quelque chose de « propre » modification d'un auditeur de l'objet.

  • J'ai essayé de passer outre l'action PreUpdate () sur le modèle.
  • J'ai essayé de désactiver les auditeurs, et rien:

-

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

plus d'idées, ou le code à regarder?

merci!

Était-ce utile?

La solution

d'après les documents à http: //www.doctrine-project.org/documentation/manual/1_1/nl/behaviors:core-behaviors#timestampable si vous voulez utiliser timestampable mais pas la partie mise à jour, il suffit d'utiliser:

Timestampable:
  updated:
    disabled: true

Et ajoutez dans votre propre champ updated_at dans la section colonnes.

Autres conseils

Vous pouvez accéder à l'auditeur directement à partir de votre objet comme ceci:


  $listenerChain = $this->getListener();

  $i = 0;

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

La façon la plus simple de le faire serait de renommer le champ updated_at à autre chose. Alors qu'il est ignoré par la doctrine.

De cette façon, vous pouvez contrôler le contenu du champ exactement.

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

problème est que vous devez connaître la position de l'auditeur

vous pouvez également désactiver tous les auditeurs de cette façon:

$record->getListener()->setOption('disabled',true);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top