2012-12-14 12 views
7

अन्य परिवर्तनों को जारी किए बिना किसी इकाई को निकालने का प्रयास करना। ध्यान दें कि (इस विशिष्ट स्थिति में जबकि इसकी वास्तव में आवश्यकता नहीं है) विधि को कार्रवाई के बाद बुलाए गए flush() के परिणाम को प्रभावित नहीं करना चाहिए।सिद्धांत 2 एकल हटाए गए इकाई को फ्लश करें

$em->remove($entity); 
$em->flush($entity); 

एक 'InvalidArgumentException' with message 'Entity has to be managed for single computation फेंकता है।

मैं केवल हटाने के लिए डीक्यूएल का उपयोग कर सकता हूं; बस सोच रहा था कि इकाई प्रबंधक के माध्यम से ऐसा करने का कोई तरीका है या नहीं।

+0

एक बग, एक इकाई है कि में हटा राज्य प्रबंधित किया जाता है की तरह लग रहा। – meze

+0

@meze हाँ, सोचा कि यह हो सकता है। यह भी सोचा कि एक वस्तु को फिसलने शायद सीमाओं के साथ कुछ है। –

+0

@meze, मुझे नहीं लगता कि उपरोक्त कोड में एक बग है। एकमात्र गलत चीज जो मैं देखता हूं वह यह तथ्य है कि 'फ्लश()' को कोई तर्क नहीं मिलता है। – manix

उत्तर

2

प्रयास करें यह एक:

  1. अलग वर्तमान ईएम से इकाई:

    $em->detach($entity); 
    
  2. ईएम का एक नया उदाहरण बना सकते हैं और इसके साथ काम निकालने के लिए:

    $em2->remove($entity); 
    $em2->flush(); 
    

या, आप विधि 0 का उपयोग कर सकते हैंअलग के आरोप ईएम से सभी संस्थाओं, इस तरह में है:

$em->clear(); 
$em->remove($entity); 
$em->flush(); 
+0

अपडेट करना चाहिए यह सभी बदली गई इकाइयों को फ्लश करेगा। – meze

+0

@meze, आप सही थे। पोस्ट – manix

+1

@manix दिलचस्प कामकाज - सरल सिर्फ डीक्यूएल के साथ एक डिलीट कर रहा है, लेकिन इकाई प्रबंधक का दूसरा उदाहरण बनाने का विचार नहीं किया था। –

3

मैं के बारे में transactions भूल गया, मैं परीक्षण करना होगा जो:

// $em instanceof EntityManager 
$em->transactional(function($em) { 
    $em->remove($entity); 
}); 

बस नहीं कुछ मैं एक का उपयोग कर सकते लेन-देन से पहले और बाद में लेनदेन स्पष्ट लेनदेन में लेनदेन के बाद बदलता है।

1

सरल समाधान है:

$entity = $em->manage($entity); 
// $entity now refers to the fully managed copy returned by the merge operation. 
// The EntityManager $em now manages the persistence of $entity as usual 
$em->remove($entity); 
$em->flush(); 
+1

यह बिल्कुल गलत है। कृपया, प्रश्न फिर से पढ़ें: "केवल एक इकाई को हटाएं"। – nick4fake

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