अच्छा PHP ORM पुस्तकालय?


268

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

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

जवाबों:


118

सिद्धांत में देखो ।

सिद्धांत 1.2 सक्रिय रिकॉर्ड को लागू करता है। Doctrine 2+ एक DataMapper ORM है।

इसके अलावा, बाहर की जाँच Xyster । यह डेटा मैपर पैटर्न पर आधारित है।

इसके अलावा, DataMapper बनाम सक्रिय रिकॉर्ड पर एक नज़र डालें ।


103

RedBean का प्रयास करें , इसकी आवश्यकता है:

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

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


9
Redbean हाथ सबसे अच्छा डेटाबेस अमूर्त परत नीचे हाथ मैं कभी के साथ काम किया है। "सर्वश्रेष्ठ में से एक" नहीं - सबसे अच्छा।
Nir Gavish

बहुत अच्छा लगा। मैं इस ORM से कम से कम कहने के लिए बहुत प्रभावित हूँ
क्रिस्टोफर टर्कीनी


1
डॉकटरिन के साथ रेडबीन की तुलना करें: stackoverflow.com/questions/8063640/redbean-vs-doctrine
PiTheNumber

3
+1 +1 +1 +! +! !!!! ... jesus मैंने दस्तावेज़ीकरण का पहला भाग पढ़ा और यह मुझे सिनिस्टर तानाशाह हँसी बनाने के लिए मिला, और मैं इसे पहले से ही डाउनलोड कर रहा हूँ!
केजेडब्ल्यू

45

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


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

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

34

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

/* 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();

सबसे अधिक, प्लग-इन और एसक्यूएल डेटा एक्सेस लेयर के साथ फ्रेमवर्क की तरह ही हल्के होते हैं: 14 KB (Axon) + 6 KB (SQLdb)। फैट-फ्री सिर्फ 55 KB का है।


15
यह हमेशा मुझे चिंतित करता है जब मैं $product->load('product_id=123')एक उदाहरण में कुछ देखता हूं ।
ज़्नर्कस

9
व्यामोह के लिए, वैकल्पिक वाक्यविन्यास है$product->load(array('product_id=:id',array(':id'=>123)));
बोरोस्का

4
फैट-फ्री में MongoDB और फ्लैट फ़ाइलों के लिए NoSQL
ORM भी है

28

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

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

इसे एक रूप दें: Pork.dbObject


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

6
Duude! यह काफी दिलचस्प है। मैं देख रहा हूं कि नवीनतम अपडेट '09 'में कहीं हुआ है। क्या यह अभी भी कायम है? यदि नहीं ... मैं बस इसे पुनर्जीवित कर सकता हूं :)
व्लाफफर

22

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

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


एकमात्र समस्या जिसे मैं Doctrine2 के साथ सोच सकता हूं, वह यह है कि यह PHP 5.3 और ऊपर पर निर्भर है।
जाबेल

8
@jblue: यह एक समस्या नहीं है, यह एक सुविधा है; ;-)। डॉक्ट्रिन जैसे बड़े पुस्तकालयों को नामस्थान की जरूरत है।
टॉम पॉज़्रुक

"मूल सिद्धांत 1 से बहुत जादू गायब हो गया।" - यह किस संबंध में सकारात्मक है?
ओलिवियर 'एल्बूम' शॉलर

13

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


मैं इस बात से भी सहमत हूं कि कोहाना वह रूपरेखा है जो PHP की दुनिया में RoR के समान है। यह सब याद आ रहा है मचान है, और KO3 में सीएलआई समर्थन के साथ यह सिर्फ किसी की अपनी आस्तीन रोल करने और इसे करने की बात है।
फिलिप व्हेलन

12

की जाँच करें आउटलेट ORM । यह प्रोपेल और डॉक्ट्रिन की तुलना में सरल है और यह हाइबरनेट के समान काम करता है, केवल एक PHP के अधिक के साथ यह महसूस करता है।


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

आउटलेट बहुत कॉन्फ़िगरेशन-भारी है।
लोटस नोट्स

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

11

मुझे वास्तव में प्रोपेल पसंद है , यहां आप एक अवलोकन प्राप्त कर सकते हैं, प्रलेखन बहुत अच्छा है, और आप इसे PEAR या SVN के माध्यम से प्राप्त कर सकते हैं।

आपको केवल कक्षाएं शुरू करने के लिए एक कार्यशील PHP5 स्थापित करने और फ़िंग की आवश्यकता है।


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



6

DORM के लिए एक शॉट दें , PHP 5 के लिए एक ऑब्जेक्ट रिलेशनल मैपर । यह सभी प्रकार के संबंधों (1-टू -1), (1-टू-कई), (कई-से-कई) और डेटा प्रकारों का समर्थन करता है। यह पूरी तरह से विनीत है: कोई कोड पीढ़ी या वर्ग आवश्यक नहीं है। मेरी राय में यह किसी भी ORM से बेहतर है, जिसमें Doctrine और Propel शामिल हैं। हालाँकि, यह अभी भी बीटा में है और अगले कुछ महीनों में काफी बदल सकता है। http://www.getdorm.com

इसमें सीखने की अवस्था भी बहुत कम होती है। आपके द्वारा उपयोग किए जाने वाले तीन मुख्य तरीके हैं:

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

4

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


4

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


4

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

3

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


तो PHP 5.3 किसी को एक बेहतर ORM लिखने में कैसे मदद करेगा? मुझे कोई कारण नहीं दिखता।
इओनु 12: जी। स्टैन

8
मुख्य कारण देर से स्थैतिक बंधन ("स्थिर" कीवर्ड) की शुरूआत है। इसके बारे में ब्लॉग
knoopx

2
ORM को वास्तव में स्टैटिक वैरिएबल की आवश्यकता नहीं है, उन्हें केवल उदाहरण के वैरिएबल का उपयोग करके अच्छी तरह से डिज़ाइन किया जा सकता है।
टॉम पॉज़्रेक

सच है, देर से स्थिर बाध्यकारी कारण है कि मैं अपने स्वयं के प्रत्येक ORM उदाहरण को इतना कम प्राप्त कर सकता हूं । स्थिर स्थैतिक बंधन से पहले यह अन्य लोगों की तरह ही बेकार था।
Xeoncross

3

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


3

PHP ADOdb आज़माएं।

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

और यह Zend फ्रेमवर्क की DB / Select से अधिक तेज़ है ।


2
adodb अपने आप को थिन मॉडल / फैट कंट्रोलर फ्लेवर के लिए अधिक उधार देता है, जो आमतौर पर अच्छी बात नहीं है।
जॉब्ले

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

3

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

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


2

यदि आप साहसिक महसूस कर रहे हैं तो आप रीपोज़ को देख सकते हैं। आउटलेट की तरह , यह हाइबरनेट के बाद मॉडलिंग की जाती है ।

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


2

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

गैकेला विशेषताएं:

  • डेटा मैपर
  • विदेशी कुंजी मानचित्रण
  • एसोसिएशन मैपिंग
  • आश्रित मानचित्रण
  • ठोस तालिका विरासत
  • क्वेरी वस्तु
  • मेटाडेटा मैपिंग
  • आलसी और उत्सुक लोड हो रहा है
  • फुल मेमकेड सपोर्ट

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


2

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

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


2

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


2

Agile Toolkit में ORM / ActiveRecord और गतिशील SQL का अपना अनूठा कार्यान्वयन है ।

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

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

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

सिंटैक्स (डायनामिक SQL):

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

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

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

यह कर्मचारी मॉडल के लिए AJAXified CRUD प्रदर्शित करेगा ।


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

पीडीओ विस्तार के लिए PHP ORM चेहरे। PHP चेहरे फ्रेमवर्क देखें ।

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

1. साइट तुर्की है; 2. आपका कोड आपके द्वारा उपयोग किए जाने वाले कोड से अलग कुछ भी नहीं है, जैसे कि Doctrine।
पेलमिस्टर 16

1

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


1

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


1

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


1

यदि आप एक ओआरएम की तलाश कर रहे हैं , तो हाइबरनेट की तरह , आपको पीएमओ को देखना चाहिए ।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.