2012-08-07 17 views
15

में इकाई प्रबंधक का उपयोग करने के लिए। मैं उस बिंदु पर पहुंचा जहां वे व्याख्यान का उपयोग कैसे करें।जब पल मैं Symfony2 उपयोग करने के लिए कैसे सीख रहा हूँ पर Symfony2

दिया वे कभी कभी इकाई प्रबंधक का उपयोग उदाहरण में:

$em = $this->getDoctrine()->getEntityManager(); 
$products = $em->getRepository('AcmeStoreBundle:Product') 
     ->findAllOrderedByName(); 

और अन्य उदाहरण में इकाई प्रबंधक नहीं किया जाता है:

$product = $this->getDoctrine() 
     ->getRepository('AcmeStoreBundle:Product') 
     ->find($id); 

इसलिए मैं वास्तव में प्राप्त किए बिना पहला उदाहरण की कोशिश की इकाई प्रबंधक:

$repository = $this->getDoctrine() 
     ->getRepository('AcmeStoreBundle:Product'); 
$products = $repository->findAllOrderedByName(); 

और उसी परिणाम प्राप्त हुए।

तो जब मैं वास्तव में इकाई प्रबंधक की आवश्यकता है और जब यह ठीक है बस एक ही बार में भंडार के लिए जाने के लिए?

उत्तर

28

ControllergetDoctrine()$this->get('doctrine') के बराबर है, Symfony\Bundle\DoctrineBundle\Registry का एक उदाहरण। रजिस्ट्री प्रदान करता है:

इस प्रकार, $this->getDoctrine()->getRepository() के बराबर होती है $this->getDoctrine()->getEntityManager()->getRepository() लौटने।

इकाई प्रबंधक उपयोगी होता है जब आप जारी रहती है या एक इकाई निकालना चाहते हैं:

$repository = $this->getDoctrine()->getRepository('AcmeStoreBundle:Product'); 
$product = $repository->find(1); 

या बेहतर:

$em = $this->getDoctrine()->getEntityManager(); 

$em->persist($myEntity); 
$em->flush(); 

तुम सिर्फ डेटा फ़ेच कर रहे हैं, तो आप केवल भंडार प्राप्त कर सकते हैं , यदि आप कस्टम खजाने का उपयोग कर रहे हैं, एक नियंत्रक समारोह में getRepository() लपेट रूप में आप अपने आईडीई से ऑटो completition सुविधा प्राप्त कर सकते हैं:

/** 
* @return \Acme\HelloBundle\Repository\ProductRepository 
*/ 
protected function getProductRepository() 
{ 
    return $this->getDoctrine()->getRepository('AcmeHelloBundle:Product'); 
} 
+0

मैं पहले से ही पता था कि मैं जब 'फ्लश का उपयोग कर इकाई प्रबंधक का उपयोग करने के लिए आवश्यक()'। 'GetProductRepository()' फ़ंक्शन का उपयोग करने का विचार कुछ भी उपयोगी हो सकता है, धन्यवाद! –

+1

@MatsRietdijk मदद की खुशी है! ऑटो-पूर्णता प्राप्त करने के लिए मैं हमेशा '$ this-> अपने' बेसकंट्रोलर 'में कस्टम फ़ंक्शंस में' ('कुछ सेवा') प्राप्त करता हूं ... – gremo

+1

'AcmeStoreBundle: Product' का स्थान कहां है, मैं 'उत्पाद' कहां पा सकता हूं मेरा सिम्फनी आवेदन। –

2

मुझे लगता है कि getDoctrine()->getRepository() बस getDoctrine()->getEntityManager()->getRepository() के लिए एक शॉर्टकट है। स्रोत कोड की जांच नहीं की, लेकिन मेरे लिए उचित लगता है।

+0

धन्यवाद, यह एक शॉर्टकट प्रतीत होता है। –

0

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