2010-09-20 7 views
6

मेरे पास डेट_क्रेटेड और डेट_मोडाइज्ड फ़ील्ड दोनों के साथ इकाइयों का एक गुच्छा है, और मैं इन फ़ील्ड को स्वचालित रूप से डालने या अपडेट करने के लिए सेट करने का प्रयास कर रहा हूं। date_created केवल डालने पर सेट है, लेकिन date_modified दोनों डालने या अपडेट पर सेट है।सिद्धांत 2 preUpdate घटना - सम्मिलित नहीं ट्रिगर?

मेरे पास मेरी इकाई वर्ग में @PreUpdate एनोटेशन के साथ एक विधि है, लेकिन ऐसा लगता है कि जब कोई इकाई अपडेट हो जाती है। यह तब नहीं कहा जाता जब एक नई इकाई डाली जाती है। दस्तावेज प्रीपेडेट घटना के बारे में यह कहता है:

"पूर्व अद्यतन घटना डेटाबेस अद्यतन संचालन से पहले डेटा डेटा पर होती है।"

क्या यह सही व्यवहार है? यदि हां, तो अपडेट या डालने से पहले एक विधि कहने का सबसे अच्छा तरीका क्या है? वर्तमान में अगर मैं तो दोनों @PreUpdate और @PrePersist साथ विधि को टैग यह काम करता है, लेकिन मुझे यकीन है कि अगर यह इष्टतम है नहीं कर रहा हूँ:

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

उत्तर

9

बनी रहती है और अद्यतन 2 अलग घटनाओं इसलिए यदि आप कॉलबैक चाहते हो रहे हैं दोनों के लिए आवेदन किया तो आप दोनों एनोटेशन की आवश्यकता होगी। यह दो तरीकों को बनाने के लिए आपकी गलतफहमी को पूरा कर सकता है:

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

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

धन्यवाद - मैंने 2 विधियों को बनाने और इसे इस तरह से करने पर विचार किया, लेकिन मैं एक के साथ रह सकता हूं। मुझे बस यकीन नहीं था कि प्रीअपडेट केवल अपडेट के लिए वैध था, या दोनों प्रविष्टियां और अपडेट। –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^