Le 18/08/2010 dans symfony

Désactiver temporairement Timestampable avec Doctrine

Timestampable est un behavior Doctrine fort pratique qui permet de mettre en place des champs « created_at » et « updated_at » sur nos modèles sans avoir à s’en soucier.

Il ont pleins d’options très pratiques, et sont entièrement automatique : à chaque save(), le updated_at est mis à jour.

Seulement il peux arriver d’avoir besoin, occasionnellement, de désactiver ces automatismes (import en masse en souhaitant garder les anciennes dates, modification d’un contenu par un bot… chacun ces problèmes hein). Voici la marche à suivre.

// Récupérer le Listener (c'est pas forcement 0, ça dépend de l'ordre dans votre Table->setUp())
$timestampable = $this->getListener()->get(0);
// Changer les options voulu, et donc désactiver tel ou tel propriété du Behavior
$timestampable->setOption(array('updated' => array('disabled' => true)));

Ce code se place au niveau de votre objet, dans l’idée vous pouvez vous faire une méthode, appelée occasionnellement donc :

public function disableTimestampableBehavior()
{
$timestampable = $this->getListener()->get(0);
$timestampable->setOption(array('updated' => array('disabled' => true)));
}

De rien ! (ah et bien sûr c’est applicable aux autres Listeners !)