2008-09-20 17 views
269

क्या PHP के लिए कोई अच्छी ऑब्जेक्ट-रिलेशनल-मैपिंग लाइब्रेरी है?अच्छा PHP ओआरएम पुस्तकालय?

मुझे PDO/एडीओ का पता है, लेकिन वे केवल डेटाबेस विक्रेताओं के बीच मतभेदों का सार तत्व प्रदान करते हैं जो डोमेन मॉडल और संबंधपरक मॉडल के बीच वास्तविक मैपिंग नहीं हैं। मैं एक PHP लाइब्रेरी की तलाश में हूं जो जावा के लिए Hibernate के समान काम करता है और एनएचबीनेटनेट .NET के लिए करता है।

उत्तर

112

Doctrine पर देखें।

Doctrine 1.2 सक्रिय रिकॉर्ड लागू करता है। Doctrine 2+ एक डेटामैपर ओआरएम है।

इसके अलावा, Xyster देखें। यह डेटा मैपर पैटर्न पर आधारित है।

इसके अलावा, DataMapper vs. Active Record पर एक नज़र डालें।

+0

दूसरा लिंक कुछ भी नहीं दिखा रहा है। –

45

केवल दो अच्छे हैं: Doctrine और Propel। हम सिद्धांत का पक्ष लेते हैं, और यह Symfony के साथ अच्छी तरह से काम करता है। हालांकि यदि आप मुख्य के अलावा डेटाबेस समर्थन की तलाश में हैं तो आपको अपना कोड लिखना होगा।

+0

प्रोफेल सिम्फनी 2 सहित सिम्फनी के साथ भी अच्छी तरह से काम करता है। – analytik

+0

प्रस्ताव php मानकों द्वारा बहुत अच्छा है। यह काफी साफ कोड बनाता है जो गेटर्स और सेटर्स के साथ आईडीई अनुकूल है और प्रश्नों के लिए एक बहुत ही साफ मानदंड अमूर्त प्रणाली है। – SuitedSloth

1

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

+3

गलत जानकारी – Berming

11

मुझे वास्तव में Propel, here पसंद है, आप एक सिंहावलोकन प्राप्त कर सकते हैं, documentation बहुत अच्छा है, और आप इसे पीएआर या एसवीएन के माध्यम से प्राप्त कर सकते हैं।

कक्षाएं उत्पन्न करने के लिए आपको केवल एक कार्यरत PHP5 इंस्टॉल, और Phing की आवश्यकता है।

+0

प्रोपेल एक मौजूदा डेटाबेस स्कीमा को 'रिवर्स इंजीनियर' भी कर सकता है - डेटाबेस स्कीमा पढ़ने से PHP ऑब्जेक्ट्स बना रहा है। –

28

मैं अपने आप पर Pork.dbObject विकसित कर रहा हूं। (एक साधारण PHP ओआरएम और सक्रिय रिकॉर्ड कार्यान्वयन) मुख्य कारण यह है कि मुझे सबसे अधिक ओआरएम बहुत भारी लगता है।

Pork.dbObejct का मुख्य विचार हल्का वजन और स्थापित करने के लिए सरल होना है। एक्सएमएल फाइलों का कोई गुच्छा नहीं, इसे बांधने के लिए कन्स्ट्रक्टर में केवल एक फंक्शन कॉल, और एक अन्य डीबीओब्जेक्ट के संबंध को परिभाषित करने के लिए एक addRelation या addCustomRelation। Pork.dbObject

+1

मैं आज हल्के PHP ओआरएम कार्यान्वयन की तलाश में था, और इस पोस्ट के लिए Pork.dbObject धन्यवाद मिला। यह बहुत अच्छा काम करता है! +1 –

+5

डुउड! यह बहुत दिलचस्प है। मैं देखता हूं कि नवीनतम अपडेट '0 9 में कहीं हुआ था। क्या यह अभी भी बनाए रखा है? यदि नहीं ... मैं बस इसे पुनर्जीवित कर सकता हूं :) – VladFr

12

Outlet ORM चेक आउट:

यह एक रूप दें। यह प्रोपेल और सिद्धांत से सरल है और यह हाइबरनेट के समान काम करता है, केवल एक PHP के साथ इसे महसूस करता है।

+3

मैंने कोशिश की। मुझे 3 ऑब्जेक्ट्स में कॉन्फ़िगरेशन, मॉडल और डेटाबेस स्कीमा में एक ही ऑब्जेक्ट गुण निर्दिष्ट करना था। ओआरएम आईएमओ को लागू करने के लिए यह बहुत काम है। – mixdev

+0

आउटलेट बहुत विन्यास-भारी है। –

+0

मैंने यह कोशिश की है (1.0 आरसी 1) और यह मूल कार्यात्मकता में भी बहुत छोटी थी। और हाँ, लिखने के लिए बहुत सी विन्यास है। मैं इसकी सिफारिश नहीं करता हूं। –

12

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

+0

मैं यह भी मानता हूं कि कोहाना एक ऐसा ढांचा है जो PHP दुनिया में आरओआर के समान है। यह सब गायब है मचान है, और केओ 3 में सीएलआई समर्थन के साथ यह सिर्फ अपनी आस्तीन को घुमाने और इसे करने का मामला है। –

2

यदि आप साहसी महसूस कर रहे हैं तो आप Repose देख सकते हैं। Outlet की तरह, यह Hibernate के बाद मॉडलिंग किया गया है।

यह अभी भी इसके विकास में बहुत जल्दी है, लेकिन अब तक डोमेन मॉडल पर केवल प्रतिबंध ही हैं कि कक्षाएं अंतिम रूप में चिह्नित नहीं हैं और संपत्तियों को निजी चिह्नित नहीं किया गया है। एक बार जब मैं PHP> = 5.3 की भूमि में आ जाता हूं, तो मैं निजी संपत्तियों के लिए भी समर्थन लागू करने की कोशिश करूंगा।

4

मैं वर्तमान में phpDataMapper पर काम कर रहा हूं, जो रूबी की डाटामैपर परियोजना जैसे सरल वाक्यविन्यास के लिए डिज़ाइन किया गया एक ओआरएम है। यह अभी भी शुरुआती विकास में है, लेकिन यह बहुत अच्छा काम करता है।

3

PHP 5.3 रिलीज़ तक एक अच्छा ओआरएम होने की उम्मीद नहीं है। यह PHP की ओओ सीमा है।

+0

तो PHP 5.3 कैसे बेहतर ओआरएम लिखने में मदद करेगा? मुझे कोई कारण नहीं दिख रहा है। –

+8

मुख्य कारण देर से स्थिर बाध्यकारी ("स्थिर" कीवर्ड) का परिचय है। http://blog.felho.hu/what-is-new-in-php-53-part-2-late-static-binding.html – knoopx

+2

ORM पर इसके बारे में पढ़ें, वास्तव में स्थिर चर की आवश्यकता नहीं है, वे हो सकते हैं केवल इंस्टेंस चर का उपयोग करके डिज़ाइन किया गया। –

6

dORM, an object relational mapper for PHP 5 पर एक शॉट दें। यह सभी प्रकार के रिश्तों (1-से-1), (1 से कई), (कई से कई) और डेटा प्रकारों का समर्थन करता है। यह पूरी तरह से अव्यवहारिक है: कोई कोड जनरेशन या कक्षा विस्तार की आवश्यकता नहीं है। मेरी राय में यह किसी भी ओआरएम से बेहतर है, सिद्धांत और प्रोपेल शामिल है। हालांकि, यह अभी भी बीटा में है और अगले कुछ महीनों में महत्वपूर्ण रूप से बदल सकता है। http://www.getdorm.com

इसमें भी एक बहुत छोटा सीखने की वक्र है। मुख्य तीन विधियों आप का उपयोग करेगा कर रहे हैं:

<?php 
$object = $dorm->getClassName('id_here'); 
$dorm->save($object); 
$dorm->delete($object); 
+2

लिंक टूटा हुआ है? – Mel

1

आप देख एक ORM के लिए कर रहे हैं, Hibernate की तरह, आप PMO पर नजर है चाहिए।

इसे आसानी से SOA आर्किटेक्चर में एकीकृत किया जा सकता है (विकसित करने के लिए केवल एक webservice क्लैस है)।

98

कोशिश RedBean, इसकी आवश्यकता है:

  • कोई विन्यास
  • कोई डेटाबेस (यह मक्खी पर सब कुछ बनाता है)
  • कोई मॉडल
  • आदि

यह भी करता है आपके लिए सभी लॉकिंग और लेन-देन और पृष्ठभूमि में प्रदर्शन की निगरानी करता है। (बिल्ली! यह कचरा संग्रह भी करता है ....) सबसे अच्छा ... आपको कोड लिखने की जरूरत नहीं है ... कोड 0 लाइन 3this, ORM layer, मुझे गधा बचाया!

+8

रेडबीन सबसे अच्छा डाटाबेस एबस्ट्रक्शन लेयर है जो मैंने कभी भी काम किया है। "सर्वश्रेष्ठ में से एक नहीं" - सर्वश्रेष्ठ। –

+0

बहुत अच्छा लगता है। मैं कम से कम –

+6

कहने के लिए इस ओआरएम से बहुत प्रभावित हूं लेकिन: http://stackoverflow.com/questions/3212917/redbean-o-rm-store-date-as-varchar255 – Sirber

3

मेरे दोस्त किएन और मैंने एक ओआरएम के पहले संस्करण पर सुधार किया है जिसे उन्होंने PHP 5.3 से पहले लिखा था। हमने अनिवार्य रूप से रूबी पर रेल के Active Record पर PHP पर पोर्ट किया है। इसमें अभी भी कुछ प्रमुख विशेषताओं की कमी है, जैसे कि लेनदेन, समग्र प्राथमिक कुंजी समर्थन, कुछ और एडेप्टर (केवल MySQL और SQLite 3 कार्य अभी)। लेकिन, हम इस सामान को खत्म करने के बहुत करीब हैं। आप PHP ActiveRecord with PHP 5.3 पर एक नज़र डाल सकते हैं।

3

PHP ADOdb आज़माएं।

मैं यह नहीं कह सकता कि यह सबसे अच्छा है, क्योंकि मैंने दूसरों का उपयोग नहीं किया है। लेकिन यह तेज़ है, यह Memcached और कैशिंग का समर्थन करता है।

और यह Zend Framework's डीबी/चयन से तेज़ है।

+2

adodb खुद को पतला मॉडल/वसा नियंत्रक स्वाद के लिए उधार देता है, जो आमतौर पर एक अच्छी बात नहीं है। – jblue

+3

एडीओडीबी एक डीएएल है, न कि ओआरएम –

+0

एडीओडीबी का ओआरएम है (लेकिन सिर्फ ओआरएम नहीं है)। यह वास्तव में एक बहुत अच्छा समाधान है, यह डीबी के लिए ज़ेंड के साथ बहुत बेहतर काम करता है (साथ ही साथ एडीओडीबी की तुलना में धीमी गति से, ज़ेंड डीबी में केवल सीमित समर्थन है), यह पैरामीटरेशन (सिद्धांत कहने के विपरीत) के साथ ऑटो एस्केपिंग का समर्थन करता है, कई अलग-अलग डीबी बैकएंड और सुपर आसान memcache एकीकरण के साथ अच्छा विस्तार योग्य कैशिंग डिजाइन है। मुझे नहीं लगता कि यह कहना बिल्कुल सही है कि यह इसे "पतला मॉडल/वसा नियंत्रक" कार्यान्वयन के लिए स्वयं को उधार देता है (आप ऐसा कर सकते हैं या नहीं, लेकिन एडीओडीबी का डिज़ाइन एक तरफ या दूसरे का पक्ष नहीं लेता है)। –

2

पीडीओ एक्सटेंशन के लिए PHP ओआरएम चेहरे। PHP Faces Framework देखें।

$urun = new Product(); 
$urun->name='CPU' 
$urun->prince='124'; 
$urun->save(); 
+0

1. साइट तुर्की है; 2. आपका कोड उस कोड से अलग नहीं है जिसका आप उपयोग करेंगे उदाहरण के साथ सिद्धांत। –

1

QCubed framework में एक शानदार ओआरएम शामिल है; यह कोड पीढ़ी और मचान पर आधारित है। ActiveRecord के विपरीत जो प्रतिबिंब पर आधारित है और आमतौर पर धीमा है, कोड जनरेशन डेटाबेस के आधार पर आपके लिए कंकाल कक्षाएं बनाता है और आपको बाद में उन्हें अनुकूलित करने देता है। यह एक सम्मोहन की तरह काम करता है।

+0

यह yii काम करता है जैसा दिखता है – sivann

22

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

यह एक बहुत जटिल ओआरएम है, लेकिन अच्छी तरह डिज़ाइन किया गया है। मूल सिद्धांत 1 से बहुत सारे जादू गायब हो गए। यह एक पूर्ण समाधान प्रदान करता है, और आप write your own ORM on top of Doctrine2 कर सकते हैं या अपने layers में से किसी एक का उपयोग कर सकते हैं।

+0

एकमात्र समस्या जिसे मैं डॉक्टर 2 के साथ सोच सकता हूं वह यह है कि यह PHP 5.3 और ऊपर निर्भर है। – jblue

+8

@jblue: यह कोई समस्या नहीं है, यह एक विशेषता है ;-)। सिद्धांत जैसे बड़े पुस्तकालयों को नामस्थान की आवश्यकता होती है। –

+0

"मूल सिद्धांत 1 से जादू का बहुत गायब हो गया।" - यह सकारात्मक क्या है? –

33

एक्सोन ओआरएम Fat-Free Framework का हिस्सा है - इसमें एक ऑन-द-फ्लाई मैपर है। कोई कोड जनरेटर नहीं। कोई बेवकूफ एक्सएमएल/YAML विन्यास फाइलें। यह सीधे बैकएंड से डेटाबेस स्कीमा पढ़ता है, इसलिए अधिकांश CRUD संचालन में आपको बेस मॉडल का विस्तार भी नहीं करना पड़ता है। MySQL, SQLite, SQL Server/Sybase, ओरेकल, PostgreSQL, आदि

/* SQL */ 
CREATE TABLE products (
    product_id INTEGER, 
    description VARCHAR(128), 
    PRIMARY KEY (product_id) 
); 

/* PHP */ 
// Create 
$product=new Axon('products'); // Automatically reads the above schema 
$product->product_id=123; 
$product->description='Sofa bed'; 
$product->save(); // ORM knows it's a new record 

// Retrieve 
$product->load('product_id=123'); 
echo $product->description; 

// Update 
$product->description='A better sofa bed'; 
$product->save(); // ORM knows it's an existing record 

// Delete 
$product->erase(); 

सब से अधिकांश, प्लग में और साथ एसक्यूएल डेटा का उपयोग परत बस के रूप में हल्के होते हैं: यह सभी प्रमुख PDO समर्थित डेटाबेस इंजन के साथ काम करता है ढांचे के रूप में: 14   केबी (एक्सन) + 6   केबी (एसक्यूएलडीबी)। फैट-फ्री सिर्फ 55   केबी है।

+13

जब मैं उदाहरण में '$ product-> load (' product_id = 123 ')' जैसा कुछ देखता हूं तो यह हमेशा मुझे चिंतित करता है। पैरानोइड के लिए – Znarkus

+8

, वैकल्पिक वाक्यविन्यास '$ product-> लोड (सरणी ('product_id =: id', array (': id' => 123))); – stillstanding

+4

फैट-फ्री में मोंगोडीबी और फ्लैट के लिए नोएसक्यूएल ओआरएम भी है फ़ाइलें – stillstanding

8

मुझे PHP लाइब्रेरी Flourish में ORM संबंधित कक्षाएं मिलीं।

4

ORM of Flourish library का प्रयास किया।

+0

हां, मैं कुछ समय से इसके साथ काम कर रहा हूं। Flourishlib महान है, लेकिन ओआरएम अभी भी कुछ काम करने के लिए है। उन अतिरिक्त तालिकाओं के साथ काम करना जिनमें अतिरिक्त गुण या विदेशी कुंजी हैं, नई वस्तुओं को बनाना थोड़ा कठिन हो सकता है। सरल मॉडल के साथ काम करना एक हवा है। PHP के लिए वैकल्पिक ओआरएम के लिए ओआरएम या आउटलेट को दोबारा देखें। – Michael

1

http://code.google.com/p/lworm/ पर देखें। यह PHP के लिए एक बहुत ही सरल, लेकिन शक्तिशाली, हल्के ओआरएम सिस्टम है। यदि आप चाहें तो आप इसे आसानी से बढ़ा सकते हैं।

1

वास्तव में एक अच्छा सरल ORM MyActiveRecord है। MyActiveRecord documentation। मैं इसका बहुत उपयोग कर रहा हूं और कह सकता हूं कि यह बहुत ही सरल और अच्छी तरह से परीक्षण किया गया है।

1

Syrius ORM पर देखा गया। यह एक नया ओआरएम है, यह परियोजना एक विकास चरण में थी, लेकिन अगले मुंह में इसे 1.0 संस्करण में रिलीज़ किया जाएगा।

1

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

1

एक और महान ओपन सोर्स PHP ओआरएम जिसका हम उपयोग करते हैं PHPSmartDb है। यह स्थिर है और आपके कोड को अधिक सुरक्षित और साफ बनाता है। इसके भीतर डेटाबेस कार्यक्षमता सबसे आसान है जो मैंने कभी भी PHP 5.3 के साथ उपयोग की है।

1

Sado एक सरल पीएचपी ORM पैकेज, उपयोग करने के लिए आसान है, और वीडियो ट्यूटोरियल

2

प्रदान करता है आप देख रहे हैं एक ORM कि डाटा मैपर प्रतिमान बल्कि सक्रिय रिकॉर्ड की तुलना में विशेष रूप से लागू करता है, तो मैं दृढ़ता से है कि आप सुझाव है GacelaPHP पर एक नज़र डालें।

Gacela विशेषताएं:

  • डाटा नक्शाकार
  • विदेशी कुंजी मानचित्रण
  • एसोसिएशन मानचित्रण
  • निर्भर मानचित्रण
  • कंक्रीट तालिका विरासत
  • क्वेरी वस्तु
  • मेटाडाटा मानचित्रण
  • लेज़ी & उत्सुक लोड हो रहा है
  • पूर्ण Memcached समर्थन

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

3

मुझे Idiorm and Paris के साथ बहुत अच्छे अनुभव हुए हैं। Idiorm एक छोटी, सरल ओआरएम पुस्तकालय है। पेरिस Idiorm पर बनाया गया एक समान सरल सक्रिय रिकॉर्ड कार्यान्वयन है। यह पीडीओ के साथ PHP 5.2+ के लिए है। यह सही है अगर आप कुछ आसान चाहते हैं कि आप केवल मौजूदा एप्लिकेशन में जा सकें।

2

ब्राजीलियाई ओआरएम: http://www.hufersil.com.br/lumine। यह PHP 5.2+ के साथ काम करता है। मेरी राय में, पुर्तगाली और ब्राजील के लोगों के लिए यह सबसे अच्छा विकल्प है, क्योंकि इसे आसानी से समझने के लिए दस्तावेज और डाउनलोड के लिए कई उदाहरण हैं।

2

Agile Toolkit का ओआरएम/एक्टिव रिकार्ड और dynamic SQL का अपना अनूठा कार्यान्वयन है।

परिचय: http://agiletoolkit.org/intro/1

सिंटेक्स (सक्रिय रिकॉर्ड):

$emp=$this->add('Model_Employee'); 
$emp['name']='John'; 
$emp['salary']=500; 
$emp->save(); 

सिंटेक्स (गतिशील एसक्यूएल):

$result = $emp->count()->where('salary','>',400)->getOne(); 

जबकि गतिशील एसक्यूएल और सक्रिय रिकॉर्ड/ORM प्रयोग करने योग्य सीधे, चंचल है टूलकिट उन्हें यूजर इंटरफेस और jQuery UI के साथ एकीकृत करता है। यह JSF के समान है लेकिन शुद्ध PHP में लिखा गया है।

$this->add('CRUD')->setModel('Employee'); 

इस कर्मचारी मॉडल के लिए साथ Ajaxified CRUD प्रदर्शित करेगा।

3

LEAP ORM for Kohana पर एक नज़र डालें। यह DB2, Drizzle, Firebird, MariaDB, एसक्यूएल   सर्वर, MySQL, ओरेकल, PostgreSQL, और SQLite सहित डेटाबेस के समूह के साथ काम करता है। एक साधारण ऑटोलोड लोड के साथ, यह लगभग किसी भी PHP ढांचे के साथ काम कर सकता है। स्रोत कोड GitHub पर https://github.com/spadefoot/kohana-orm-leap पर है। आप LEAP's tutorials ऑनलाइन चेकआउट कर सकते हैं।

ओआरएम लाइब्रेरी गैर-पूर्णांक प्राथमिक कुंजी और समग्र कुंजी के साथ काम करता है। कनेक्शन डेटाबेस कनेक्शन पूल के माध्यम से प्रबंधित किए जाते हैं और यह कच्चे एसक्यूएल प्रश्नों के साथ काम करता है। ओआरएम में एक प्रश्न निर्माता भी है जो एसक्यूएल स्टेटमेंट्स को सुपर सरल बनाता है।

2

माइक्रोएमवीसी में 13   केबी ORM है जो केवल 8   केबी database class पर निर्भर करता है। यह ओआरएम ऑब्जेक्ट्स के रूप में सभी परिणामों को भी लौटाता है और वर्तमान ऑब्जेक्ट की तालिका और प्रत्येक ऑब्जेक्ट में मेटा डेटा के बारे में जानकारी एम्बेड करने से बचने के लिए देर से स्थिर बाध्यकारी का उपयोग करता है। इसके परिणामस्वरूप सबसे सस्ता ओआरएम ओवरहेड होता है।

यह MySQL, PostgreSQL, और SQLite के साथ काम करता है।

2

NotORM

include "NotORM.php"; 
$pdo = new PDO("mysql:dbname=software"); 
$db = new NotORM($pdo); 
$applications = $db->application() 
->select("id, title") 
->where("web LIKE ?", "http://%") 
->order("title") 
->limit(10) 
; 
foreach ($applications as $id => $application) { 
echo "$application[title]\n"; 
} 
2

मैं miniOrm पर काम करते हैं। ऑब्जेक्ट मॉडल & MySQL एब्स्ट्रक्शन लेयर का उपयोग करने के लिए बस एक मिनी ओआरएम, जितना संभव हो सके। उम्मीद है कि यह आपकी मदद कर सकता है: http://jelnivo.fr/miniOrm/

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