2010-09-20 26 views
6

Ben date_created ve date_modified alanda hem varlıkların bir grup var ve ben otomatik olarak bu alanlara sahip ekleme veya güncelleştirme kendilerini ayarlamak çalışılıyor. date_created sadece ek olarak ayarlanır, ancak date_modified her iki insert veya update'de ayarlanır.Doctrine 2 preUpdate olayı - ekte tetiklenmedi mi?

Bir @PreUpdate ek açıklamasıyla benim varlık sınıfında bir yöntemi var, ancak yalnızca bir varlık güncellendiğinde denilen olsun görünüyor. Yeni bir varlık eklendiğinde çağrılmaz. dokümantasyon preUpdate olay hakkında şunları söyler: "preUpdate olay varlık verilerine veritabanı güncelleme işlemleri önce gerçekleşir"

Bu doğru davranış

mi? Eğer öyleyse, hem güncelleme hem de ekleme öncesi denilen bir yönteme sahip olmanın en iyi yolu nedir? Sonra @PreUpdate ve @PrePersist hem yöntemini etiketlemek Şu eğer çalıştığını, ancak bu optimum olup olmadığından emin değilim:

/** 
* @PreUpdate 
* @PrePersist 
*/ 
public function beforeSave() 
{ 
    if (!$this->getCreatedAt()) { 
     $this->setCreatedAt(new \DateTime()); 
    } 
    $this->setModifiedAt(new \DateTime()); 
} 

cevap

9

Persist ve olmak geri arama isterseniz böylece Güncelleme 2 farklı olaylardır Onlara hem uygulanmış hem de ek açıklamaları gerekir. Bunun yerine iki farklı yöntem yaratabilirsiniz:

/** 
* @PrePersist 
*/ 
public function beforePersist() 
{ 
    $this->setCreatedAt(new \DateTime());   
    $this->setModifiedAt(new \DateTime()); 
} 

/** 
* @PreUpdate 
*/ 
public function beforeUpdate() 
{   
    $this->setModifiedAt(new \DateTime()); 
} 
+0

Teşekkürler - 2 yöntem oluşturmayı ve bu şekilde yapmayı düşündüm, ama biriyle yaşayabilirim. Sadece preUpdate sadece güncellemeleri veya ekler ve güncellemeler her ikisi için meşru olup olmadığından emin değildi. –

İlgili konular