2008-10-20 5 views
16

मैं PHP के लिए रूबी के सक्रिय रिकॉर्ड की तलाश में हूं। कुछ ऐसा इतना आसान है कि मैं अपने खेतों को परिभाषित करता हूं, बेस ओआरएम कक्षा का विस्तार करता हूं, और मुझे एसीआईडी ​​ऑपरेशन मुफ्त में मिलता है। मुझे किसी भी कोड को लिखने के बिना डिफॉल्ट गेटर्स और सेटर्स प्राप्त करना चाहिए, लेकिन एक डिफ़ॉल्ट गेटर या सेटर ओवरराइड करना उतना ही आसान है जितना कि $ फील्डनाम प्राप्त करें या $ फ़ील्ड सेट करें जो व्यवहार मैं चाहता हूं उसके साथ कार्य करता हूं। सिम्फनी आपको प्रति ऑब्जेक्ट के बारे में 5 फाइलें बनाता है, और सभी परिभाषित ऑब्जेक्ट्स हमेशा तक लोड करते हैं जहां तक ​​मैं बता सकता हूं। बेहतर विकल्प क्या है? यह बेहतर क्यों है? क्या आप अपने उत्तरों में सरल उदाहरण डाल सकते हैं?PHP के लिए ओआरएम ढांचे का उपयोग करने के लिए सबसे आसान क्या है?

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

+0

मैं नीचे पोस्ट पर एक नजर डालें लेकिन वहाँ अपने सिद्धांत समस्याओं का समाधान है। एक ./doctrine जेनरेट-मॉडल-डीबी या ./doctrine जेनरेट-yaml-db रिवर्स इंजीनियरों को क्रमशः कक्षा और यामल फ़ाइलों में अपना डेटाबेस चला रहा है। – dcousineau

उत्तर

5

दोनों कोडइग्निटर (http://codeigniter.com/user_guide/database/active_record.html) और इसके PHP5 केवल फोर्क कोहाना (http://docs.kohanaphp.com/libraries/orm) में ActiveRecord पैटर्न के कार्यान्वयन होते हैं।

+0

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

+0

जैक, यह सच नहीं है। ज़ेंड की तालिका विधियां Zend_Db_Table_Row या Zend_Db_Table_Rowset प्रकार की वस्तुएं लौटाती हैं। आप इन वर्गों का विस्तार कर सकते हैं। आप अपनी Zend_Db_Table कक्षाओं में अन्य तालिकाओं पर निर्भरता घोषित कर सकते हैं। लेकिन जो कुछ भी - मुझे यकीन है कि कहना आपकी आवश्यकताओं के लिए पर्याप्त होगा। –

+0

अद्यतन के लिए धन्यवाद। मैंने पुष्टि की है कि आप ज़ेंड सामान पर सही हैं। (जैसा कि मैंने कभी संदेह किया है;) – Zak

4

Zend_Db_Table और Zend_Db_Table_Row जो आप वर्णन कर रहे हैं उस पर काफी अच्छे हैं। आपको किसी भी कॉन्फ़िगरेशन फ़ाइल की आवश्यकता नहीं है, अधिकांश मेटाडेटा डेटाबेस से ही "खोजा" है।

तकनीकी रूप से ये कक्षाएं ActiveRecord पैटर्न को लागू नहीं करती हैं। इसके बजाय, वे Table Data Gateway और Row Data Gateway पैटर्न लागू करते हैं। साथ में, ये ActiveRecord के समान मूल्य प्रदान करते हैं, और कुछ तरीकों से ActiveRecord से अधिक लचीला होते हैं।

लेकिन किसी भी ओआरएम के साथ, अनिवार्य रूप से कुछ एसक्यूएल प्रश्न और संचालन हैं जिन्हें आप ओओ इंटरफ़ेस के माध्यम से नहीं कर सकते हैं। कोई ओआरएम एक-स्टॉप शॉपिंग के रूप में काम नहीं कर सकता है।

फुटनोट: मैंने ज़ेंड फ्रेमवर्क प्रोजेक्ट पर एक साल से अधिक समय तक काम किया, खासकर ज़ेंड_Db घटक पर। लेकिन मैं अब उनके लिए काम नहीं करता हूं।

5

मैंने ब्लूट के बिना अपना खुद का निर्माण किया है। (हालांकि मुझे अपने ऑन-साइट स्रोतों को अपडेट करने की आवश्यकता है)

मैंने इसे ध्यान में रखते हुए बिल्कुल सही बिंदुओं के साथ बनाया है: कोई दर्जन xml फ़ाइलें नहीं, कोई बड़ा ढांचा नहीं, केवल संपत्ति के लिए डेटाबेस के साथ सरल निर्माता हैं और यह आपके काम करता है मूल सीआरयूडी/ढूंढें/सामान में शामिल हों। अधिकांश चीजों के लिए, मुझे कस्टम प्रश्न लिखने की भी आवश्यकता नहीं है।

मैंने यह सब my site पर पहले लिखा है, इसके बारे में जानने के लिए basic examples को जांचना सुनिश्चित करें।

अगला संस्करण जो मैं रिलीज़ करूंगा, उसमें शामिल होने पर जुड़ने के लिए काम करने वाले एक-लाइन में शामिल होने के साथ आता है (आपके डेटाबेस के माध्यम से 'पथ' चलने के लिए), आईएनआई आधारित डेटाबेस सेटिंग्स, क्रॉस डेटाबेस समर्थन, सुपर-सरल डेटाबेस अबास्ट्रक्शन और ए यदि आपका डेटाबेस डाउन है तो मानक लॉगर जो SQLite पर वापस आ जाता है।

यदि आप अपडेट में दिलचस्पी रखते हैं तो बस एक चिल्लाओ, मैं इसके लिए भीड़ डालूंगा।

ओह हाँ और भूलें, Pork.Generator नामक अच्छा दृश्य मचान जनरेटर भी है। यह अपने डेटाबेस संरचना का विश्लेषण और खोजने की कोशिश करता 1: 1 1: कई और कई कई संबंधों, और स्वचालित रूप से आप के लिए कक्षाएं :-) relations found in database http://www.schizofreend.nl/images/demo3.jpg

11

मैं Doctrine के एक बड़े प्रशंसक जो एक पूर्ण है हूँ उत्पन्न कर सकते हैं विशेषीकृत ओआरएम जो प्रोपेल को सिम्फनी के डिफ़ॉल्ट ओआरएम के रूप में बदल देगा।

यह अपने बुनियादी ORM सामान आप एक पूर्ण विशेषताओं क्वेरी बिल्डर है कि मैं अद्भुत होने के लिए मिल गया है के साथ उम्मीद थी मिला है।

यह अपने डेटाबेस का प्रबंधन करने के लिए कमांड लाइन उपकरण का पूर्ण सुइट के साथ आता है। उदाहरण के लिए, आप YAML में अपने स्कीमा और फिक्स्चर बना सकते हैं, सिद्धांत को अपनी स्कीमा के आधार पर कक्षाएं उत्पन्न कर सकते हैं, डेटाबेस बना सकते हैं, मॉडलों के आधार पर स्कीमा बना सकते हैं, फिर डेटाबेस को अपने फिक्स्चर के साथ एक ही ./doctrine build-all-reload के साथ पॉप्युलेट कर सकते हैं।

यह भी डेटाबेस प्रवास और recently updated माइग्रेशन स्वचालित रूप से अंतर करने के लिए और अपने माइग्रेशन मॉडल उत्पन्न लिए समर्थन शामिल है।

अपने सिद्धांत की शिकायतों के अनुसार, आप स्वचालित रूप से अपने वर्तमान डेटाबेस सेटअप से क्रमश: मॉडल और YAML फ़ाइलें बनाने के लिए एक कमांड ./doctrine generate-models-db या ./doctrine generate-yaml-db चला सकते हैं।

अन्य नस्लों में "Behaviors" शामिल है जो आपके स्कीमा में कुछ, अच्छे, व्यवहार को लागू करते समय जीवन को अधिक आसान बनाता है। उदाहरण के लिए आप अपनी कक्षा फ़ाइल में "टाइमस्टैम्पबल" व्यवहार जोड़ सकते हैं। डॉक्टर स्वचालित रूप से 'बनाया_at' और 'update_at' कॉलम जोड़ता है, उन्हें पॉप्युलेट करता है, और प्रत्येक $object->save() आपके द्वारा स्वचालित रूप से 'अपडेट_ट' कॉलम अपडेट करता है। अधिक जटिल व्यवहार में i18n, टेबल वर्जनिंग और पेड़ शामिल हैं (हालांकि वास्तव में केवल नेस्टेडसेट)।

व्यक्तिगत तौर पर मैं हर मौका मैं सिद्धांत के साथ अत्यंत आसक्त और इसके बारे में बड़बड़ाना गया है।

1

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

http://framework.maintainable.com/mvc/3_model.php#c3.7

आप एक रूपरेखा कोड पीढ़ी के आधार पर चाहते हैं, QCodo प्रयास करें। जो भी dcousineau सिद्धांत के लिए कहा, मैं Qcodo के लिए कह सकते हैं। यह एनईटी/डेल्फी का अनुकरण करने वाला एक पूर्ण संचालित ढांचा है। हालांकि आप केवल कोड पीढ़ी की सुविधा दे सकते हैं और शेष ढांचे से अपने जेनरेट किए गए वर्ग को अलग करने के तरीकों को ढूंढ सकते हैं। इस प्रकार, आप अन्य ढांचे के भीतर वर्गीकृत जेनरेट एम्बेड कर सकते हैं।

1

एक अन्य विकल्प है कि रूबी DataMapper के कार्यान्वयन इस प्रकार phpDataMapper है। यह एक ActiveRecord के बजाय स्पष्ट रूप से एक डेटा मैपर :) है।

9

मैं रेडबीन नामक एक छोटी ज्ञात ओआरएम परत का उपयोग करता हूं। आप इसे यहां पा सकते हैं: http://www.redbeanphp.com। इस अर्थ में बिल्कुल अनूठा है कि यह बिना किसी कॉन्फ़िगरेशन फ़ाइलों के टेबल टेबल कॉलम और इंडेक्स बनाता है। मुझे यह एक बड़ा टाइमवेवर लगता है!

1

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

आप YAML में डेटाबेस परिभाषाओं पसंद नहीं है, तो आप हमेशा ORM Designer या MySQL Workbench उपयोग कर सकते हैं।

0

मैं QCubed की सलाह देता हूं। यह एक अविश्वसनीय रूप से शक्तिशाली PHP5-केवल ओआरएम ढांचा है जो कोड जनरेशन, यूआई मचान, और तेज़ अनुप्रयोग विकास पर केंद्रित है।प्रशिक्षण वीडियो पर एक नज़र डालें: http://qcu.be/content/video-screencasts

0

http://dbphp.net

पेशेवरों

  • उत्पन्न करता है/डेटाबेस/टेबल/क्षेत्रों/विभिन्न तालिका/क्षेत्र मक्खी पर जिम्मेदार बताते संशोधित करता है।
  • कोई स्थापना की आवश्यकता नहीं है।
  • कोई कॉन्फ़िगर नहीं है।
  • केवल पुस्तकालय शामिल करने और कार्य शुरू करने के लिए डीबी लिंक पैरामीटर निर्दिष्ट करने की आवश्यकता है।
  • यह स्थानीयकरण समर्थन में बनाया गया है।
  • इसमें विभिन्न कैश स्तर हैं और कैश इंजन का विस्तार करने की अनुमति देता है।
  • यह एक ही समय में कई विभिन्न डेटाबेस कनेक्शन के साथ काम करता है।
  • यह अन्य डेटाबेस सर्वरों में स्थित तालिकाओं के बीच संबंध बना सकता है।
  • यह कक्षा और चरणीय दस्तावेज़ टिप्पणियों का उपयोग कर तालिका/फ़ील्ड विशेषताओं को निकालता है।

विपक्ष

  • यह केवल वस्तुओं के साथ काम करता है। यानी आपके पास परिभाषित वर्ग होना चाहिए और लोड या इत्यादि को बचाने के लिए कक्षा का उदाहरण होना चाहिए
  • इसमें कोई साइट नहीं है लेकिन इसमें उदाहरण फ़ोल्डर हैं।
0

मुझे Idiorm and Paris पसंद है और दोनों छोटी परियोजनाओं पर उनका उपयोग करें। Idiorm वास्तविक ओआरएम है, जबकि पेरिस सक्रिय रिकॉर्ड कार्यान्वयन है। आप या तो एक का उपयोग कर सकते हैं जिसे आप पसंद करेंगे।

एक भी एक कांटा Granada कहा जाता है, जो Idiorm और पेरिस के ऊपर बना हुआ है है, और कहते हैं उत्सुक लोड हो रहा है की तरह समर्थन आदि

0

वस्तु संबंधपरक नक्शाकार PHP के लिए (ORM) है कि एक शक्तिशाली डेटाबेस अमूर्त के शीर्ष पर बैठता है परत (डीबीएएल)। इसकी प्रमुख विशेषताओं में से एक है स्वामित्व ऑब्जेक्ट उन्मुख एसक्यूएल बोली में डेटाबेस क्वेरीज लिखने का विकल्प है जिसे हाइबरनेट्स एचक्यूएल द्वारा प्रेरित डॉक्टरेट क्वेरी भाषा (डीक्यूएल) कहा जाता है। यह डेवलपर्स को एसक्यूएल के शक्तिशाली विकल्प के साथ प्रदान करता है जो अनावश्यक कोड डुप्लिकेशन की आवश्यकता के बिना लचीलापन बनाए रखता है।