2011-10-28 8 views
15

उसी इकाई के भीतर मेरे पास प्रीपेडडेट और प्रीपेर्सिस्ट है। प्रीपेडेट आग लगती है, लेकिन प्रीपेर्सिस्ट कभी नहीं करता है। जीवनशैली कॉलबैक के भीतर फ्लश और टिप्पणियों के बाद मैंने die() लगाया। पूर्ण इकाई http://pastebin.com/yUk1u4GQसिद्धांत 2 प्रीपेर्सिस्ट आग नहीं करता

इकाई कॉलबैक में देखा जा सकता

/** 
* @PreUpdate 
*/ 
public function fixDates(){ 
    $this->updatedOn = $this->getNow(); 
    $this->closedDate = null; 
    $this->openDate = null; 
    print "dates fixed"; 
} 

/** 
* @PrePersist 
*/ 
public function prePersist() { 
    print 'in prePersist'; 
    die(); 
} 

इकाई प्रबंधक

$em->persist($school); 

$em->flush(); 
die(); 

मेरे स्क्रीन लिखा है "दिनांक तय" कहता है, लेकिन नहीं prePersist संदेश। मेरे पास इकाई के शीर्ष पर @HasLifecycleCallbacks है।

उत्तर

34

प्रीपेर्सिस्ट केवल तभी निकाल दिया जाता है जब आप INSERT कथन कर रहे हैं, UPDATE कथन नहीं।

परीक्षण करते समय, यह न भूलें कि UPDATE कथन केवल तब निकाल दिया जाता है जब इकाई विशेषताएँ वास्तव में बदलती हैं। यदि इकाई को उस इकाई को बनाए रखने के लिए बुलाया जा रहा है, तो पहले यह दिखता है कि कोई बदलाव है या नहीं। यदि नहीं, तो कोई एसक्यूएल क्वेरी नहीं की जाती है और @PreUpdate विधि नहीं कहा जाता है।

+0

उपरोक्त। मुझे यह भी मुश्किल तरीका मिला (चरण डीबगिंग के माध्यम से) जब मेरा कोड काम नहीं कर रहा था। आईएमओ वर्तमान दस्तावेज यह स्पष्ट नहीं करता है, बनाने के लिए एक आसान गलती क्या है। – iainp999

4

मुझे बस एक ही समस्या थी। उम्मीद है कि यह आपकी मदद करता है:

मैं उपयोग कथन के साथ एनोटेशन आयात करना भूल गया। आप इस न "ORM" उपसर्ग जोड़ना भूल का प्रयास करें:

use Doctrine\ORM\Mapping as ORM; 

// ... 

/** 
* @ORM\PreUpdate 
*/ 
public function preUpdate() 
{ 
} 
47

अपनी कक्षा एनोटेशन में जीवनचक्र कॉलबैक सक्षम करने के लिए मत भूलना:

/** 
* Report\MainBundle\Entity\Serveur 
* @ORM\HasLifecycleCallbacks 
*/ 
class Serveur { 
+0

यह मेरी समस्या थी। धन्यवाद! – jasonlfunk

+0

आपका उत्तर मेरी समस्या का समाधान। धन्यवाद ! –

+0

मुझे 'हैस्लिफसायकल कॉलबैक' गायब था। धन्यवाद! – MParsons

9

मैं जानता हूँ कि इस सवाल का लगभग 2 साल पुराना है , लेकिन मुझे बस एक ही समस्या थी और चूंकि इसका कोई स्वीकार्य उत्तर नहीं है, इसलिए मैं एक आखिरी चीज़ साझा करना चाहता हूं जो हर कोई उल्लेख करना भूल गया।

हालांकि ऐसा लगता है कि ट्रिगर विधि केवल इकाई वर्ग द्वारा ही उपयोग की जाएगी, इसका दायरा सार्वजनिक रखा जाना चाहिए। मेरी विधि सिर्फ इसलिए ट्रिगर नहीं कर रही थी क्योंकि मैंने इसे संरक्षित के रूप में चिह्नित किया था। मुझे उम्मीद है कि यह किसी की मदद करेगा।

3

शायद यह संस्करण निर्भर लेकिन मेरे काम कर टिप्पणियों को एक अगले दृश्य है:

जीवन चक्र वर्ग एनोटेशन:

/** 
* @Entity @Table(name="table_name") 
* @HasLifecycleCallbacks 
**/ 

घटनाक्रम एनोटेशन:

/** @PrePersist **/ 
/** @PreUpdate **/ 

सब मैं में है वह यह है कि यही कारण है कि आदर्श।

+0

हां !! सिद्धांत में दस्तावेज़ों के मुताबिक 2 इकाई पर एक विधि को @ प्रीपेर्सिस्ट ईवेंट के रूप में बुलाया जाता है। इकाई वर्ग PHP डॉकब्लॉक में केवल @ हैस्लाइफसाइकिल कॉलबैक के साथ काम करता है। –

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

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