2010-09-22 28 views
8

यदि मैं ओआरएम का उपयोग करता हूं तो ज़ेंड या सिम्फनी के साथ कहें। क्या यह सब कुछ है या कुछ भी सौदा नहीं है?ओआरएम सभी या कुछ भी नहीं है?

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

+2

ओआरएम पर निर्भर करता है, उदाहरण के लिए एनएचबर्ननेट [नामित प्रश्न] का समर्थन करता है (http://www.sidesofmarch.com/index.php/archive/2009/02/11/executing-native-sql-using-nhibernate-named -queries /)। – R0MANARMY

+0

आप किस ओआरएम पर विचार कर रहे थे? –

उत्तर

9

अधिकांश ओआरएम आपको विज्ञापन प्रश्नों को चलाने देंगे।

+0

'आप किस ओआरएम पर विचार कर रहे थे?' मैं कम से कम अभी तक प्रोपेल और सिद्धांत देख रहा हूं। – jblue

+0

ज़ेंड में डीबी हैंडल को पकड़ने की क्षमता है और डीबी पर कच्चे प्रश्नों को भी आग लगाना है। यह अधिक महत्वपूर्ण है कि आप अपने सभी डीबी एक्सेस कोड को मॉडल कक्षाओं में डाल दें ताकि आप इसे बाद में ढूंढ सकें और अपडेट कर सकें, यह मेरी राय में पूरी तरह से ओआरएम तक चिपकने के लिए है। –

6

सिद्धांत का उपयोग करते हुए यह काफी ORM के "बाहर तोड़" करने के लिए आसान है। सिद्धांत आपको 4 अलग-अलग तरीकों से प्रश्न लिखने देता है:

  • डीक्यूएल। सिद्धांत की अपनी क्वेरी भाषा जो सिद्धांत के सभी लाभों के साथ आता है।
  • "कच्चे" डीक्यूएल (सिद्धांत 2 में "मूल प्रश्न")। यह डीक्यूएल के समान है लेकिन कमांड में थोड़ी अधिक लचीलापन की अनुमति देता है (उदा। डेटाबेस विशिष्ट विशेषताओं)। इस मोड में, आपको एक दूसरे से संबंधित घटक कैसे संबंधित हैं इसके बारे में थोड़ा और निर्दिष्ट करना होगा।
  • एसक्यूएल, PHP के पीडीओ का उपयोग कर। आप पीडीओ इंस्टेंस प्राप्त करने के लिए एक डॉक्टरेट_Conneक्शन का उपयोग कर सकते हैं जो आपको प्रश्न लिखने देता है लेकिन अभी भी पीडीओ द्वारा दी गई अतिरिक्त सुरक्षा और उपयोग की आसानी है।
  • कच्चे एसक्यूएल। जबकि मुझे यकीन नहीं है कि आप इसे क्यों चाहते हैं, मुझे लगता है कि सिद्धांत यह प्रदान करता है, यदि नहीं, तो आप हमेशा पूरी तरह से सिद्धांत से बाहर निकल सकते हैं।

यदि आप सिम्फनी के अंदर सिद्धांत का उपयोग कर रहे हैं, तो सिम्फनी की बिल्कुल कोई विशेषताएं नहीं है जो आपको सिद्धांत का उपयोग करने में लॉक करती है, भले ही यह सक्षम हो।

एक अंतिम चेतावनी: यदि आप कुछ डॉक्टरों की उन्नत विशेषताओं (जैसे घटनाओं या व्यवहार) का उपयोग कर रहे हैं तो इन्हें डीक्यूएल के बाहर पूछे जाने पर इन्हें जोड़ना मुश्किल हो जाएगा।

+0

'घटनाओं या व्यवहार' का अर्थ है 'बनाया_at' और 'update_at'? – jblue

+0

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

0

आप अपनी पसंद के अनुसार मिश्रण और मिलान कर सकते हैं। मुख्य जोखिम आपके उपकरणों के बीच असंगत असंगतताएं पेश कर रहा है। काल्पनिक उदाहरण के लिए:

अगर मैं एक doctrine2 ORM इकाई एक उपयोगकर्ता को फोन किया और मैं उन मेज पर flushes के बीच कुछ मूल्यों को बदलने के लिए Zend_Db_Table का उपयोग किया है, मैं कुछ अनजाने दुष्प्रभाव या अवांछित व्यवहार हो सकता है।

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