[symfony] Eviter la mise à jour de updated_at
Par Guillaume Bretou le mardi, janvier 19 2010, 09:32 - Symfony - Lien permanent
Au cours d'un projet, j'ai eu à implémenter un système de verrouillage sur les objets d'une table. Ce verrouillage était réalisé avec la modification d'une colonne (locked_until) contenant un timestamp.
Le problème était que lorsque je mettais à jour cette colonne, le updated_at de mon objet était lui aussi mis à jour, ce qui est tout à fait normal.
J'ai donc essayé de trouver comment contourner la mise à jour du champ et j'ai finalement trouver ça :
public function updateLock($userId)
{
$updatedAt = $this->getUpdatedAt();
$this->setLockedUntil(time() + sfConfig::get('app_lock_delay'
$this->setLockedBy($userId);
$this->save();
$this->setUpdatedAt($
$this->save();
}
On sauvegarde l'ancienne valeur de l'updated_at, puis on effectue les modifications sur l'objet et on sauvegarde. Ensuite (et voila l'astuce) il suffit de faire un appel à setUpdatedAt() et de sauvegarder à nouveau l'objet. Ainsi, la valeur n'aura pas changé !


