2013-10-23 7 views
6

में रिकॉर्ड हटाएं मैं सिद्धांत में एक रिकॉर्ड को हटाने की कोशिश कर रहा हूं, लेकिन मुझे नहीं पता कि यह क्यों हटा नहीं रहा है।सिद्धांत

यहाँ मेरी कोड है:

function del_user($id) 
{ 
    $single_user = $entityManager->find('Users', $id); 

    $entityManager->remove($single_user); 

    $entityManager->flush(); 
} 

प्लस: मैं कैसे क्वेरी गूंज कर सकते हैं यहाँ क्या हो रहा है देखने के लिए?

+1

यह इस '$ इकाई = $ em-> getRepository ('ProjectYourBundle: उपयोगकर्ता') की तरह होना चाहिए -> ढूंढें ($ आईडी); '? –

+0

आप 'getRepository' –

उत्तर

0

अपने $single_user के var_dump() को आजमाएं। यदि यह "null" है, तो यह अस्तित्व में नहीं है?

यह भी जांचें कि "उपयोगकर्ता" वैध इकाई नाम (कोई नामस्थान नहीं है), और क्या $ आईडी उपयोगकर्ता के पीके संदर्भित करता है?

आप प्रश्नों कि क्रियान्वित कर रहे हैं देखना चाहते हैं तो जाँच अपने mysql/एसक्यूएल/... प्रवेश करें या सिद्धांत \DBAL\Logging\EchoSQLLogger

0

आप पहली जरूरत भंडार पर गौर।

$entityManager->getRepository('Users')->find($id); 

$single_user = $entityManager->find('Users', $id); 

'उपयोगकर्ता' स्ट्रिंग के बजाय

उपयोगकर्ता का नाम (यदि आप Symfony, Zend का उपयोग कर रहे निर्भर करता है।। आदि) सिद्धांत में भंडार है।

+0

खो रहे हैं इस प्रश्न में * symfony2 * टैग है, आपने ज़ेंड का उल्लेख क्यों किया? –

+1

क्योंकि यह symfony2 प्रश्न के रूप में इसे गलत करने के लिए गलत है, यह एक सिद्धांत प्रश्न – ROLO

0

क्या आप अपनी इकाई को अच्छी टिप्पणी एनोटेशन के रूप में देखते हैं?

cascade={"persist", "remove"}, orphanRemoval=true 
0

सबसे पहले, आप उपयोगकर्ताओं के अपने पूरी तरह से योग्य वर्ग के नाम है अगर जाँच करने के लिए आवश्यकता हो सकती है। यदि चेक नहीं है, और नामस्थान जानकारी के साथ इसे अपने वर्ग के नाम पर अपडेट करें।

सुनिश्चित करें कि खोज() द्वारा लौटाई गई वस्तु शून्य नहीं है या गलत नहीं है और ईएम के निकालने() को कॉल करने से पहले आपकी इकाई वर्ग का एक उदाहरण है।

अपने अन्य प्रश्न के संबंध में, सिद्धांत को वापस करने के बजाय एसक्यूएल के मैं सभी प्रश्नों को लॉग इन करने के लिए बस अपने डेटाबेस (MySQL) का उपयोग करता हूं (इसके विकास के माहौल के बाद से)।

8

यह एक पुराना सवाल है और अभी तक इसका कोई जवाब नहीं लगता है। संदर्भ के लिए मैं इसे अधिक संदर्भ के लिए यहां छोड़ रहा हूं। (यह मानते हुए आप अपने नियंत्रक में हैं) इसके अलावा, आप जाँच कर सकते हैं doctrine documentation

एक रिकार्ड हटाने के लिए, आप की जरूरत करने के लिए:

// get EntityManager 
$em = $this->getDoctrine()->getManager(); 

// Get a reference to the entity (will not generate a query) 
$user = $em->getReference('ProjectBundle:User', $id); 

// OR you can get the entity itself (will generate a query) 
// $user = $em->getRepository('ProjectBundle:User')->find($id); 

// Remove it and flush 
$em->remove($user); 
$em->flush(); 

एक reference हो रही की पहली विधि का उपयोग आमतौर पर बेहतर अगर आप सिर्फ करना चाहते है पहले जांच किए बिना इकाई को हटाएं कि यह मौजूद है या नहीं, क्योंकि यह डीबी से पूछताछ नहीं करेगा और केवल एक प्रॉक्सी ऑब्जेक्ट बनाएगा जिसका उपयोग आप अपनी इकाई को हटाने के लिए कर सकते हैं।

यदि आप यह सुनिश्चित करना चाहते हैं कि यह आईडी पहले वैध इकाई से मेल खाती है, तो दूसरी विधि बेहतर है क्योंकि यह इसे हटाने की कोशिश करने से पहले आपकी इकाई के लिए डीबी से पूछेगी।

+0

प्रश्न है .. यह समस्याएं 2 SQL को एक को खोजने के लिए आदेश देता है, एक को हटाने के लिए। क्या वह अच्छी चीज़ है? – Dennis

+1

@ डेनिस यह आपकी आवश्यकताओं पर निर्भर करता है। मैंने आपके प्रश्न को कवर करने के लिए अपना जवाब अपडेट किया। धन्यवाद। –

2

एक Silex मार्ग मैं इस तरह करते हैं, यदि यह मदद करता है किसी को:

$app->get('/db/order/delete', function (Request $request) use ($app) { 
... 

    $id = $request->query->get('id'); 

    $em = $app['orm.em']; //or wherever your EntityManager is 
    $order = $em->find("\App\Entity\Orders",$id); //your Entity 

    if($order){ 
    try{ 
     $em->remove($order); 
     $em->flush(); 
    } 
    catch(Exception $e) 
    { 
     return new Response($e->getMessage(), 500); 
    } 
    return new Response("Success deleting order " . $order->getId(), 200); 
    }else{ 
    return new Response("Order Not Found", 500); 
    } 
} 
संबंधित मुद्दे