PHP ORM Library ที่ดี?


268

มีไลบรารี่การทำแผนที่วัตถุสัมพันธ์ที่ดีสำหรับ PHP หรือไม่?

ฉันรู้จักPDO / ADO แต่ดูเหมือนว่าจะให้เฉพาะความแตกต่างระหว่างผู้จำหน่ายฐานข้อมูลเท่านั้นไม่ใช่การจับคู่ที่แท้จริงระหว่างโมเดลโดเมนกับโมเดลเชิงสัมพันธ์ ฉันกำลังมองหาไลบรารี PHP ที่ทำงานคล้ายกับวิธีHibernateสำหรับ Java และ NHibernate ทำเพื่อ. NET

คำตอบ:



103

ลองRedBeanมันต้องการ:

  • ไม่มีการกำหนดค่า
  • ไม่มีฐานข้อมูล (มันสร้างทุกอย่างได้ทันที)
  • ไม่มีรุ่น
  • เป็นต้น

มันยังล็อคและการทำธุรกรรมทั้งหมดให้คุณและตรวจสอบประสิทธิภาพในพื้นหลัง (Heck! มันยังไม่เก็บขยะ .... ) ที่ดีที่สุดของทุกคน ... คุณไม่ต้องเขียนเดียว ... บรรทัดของรหัส ... พระเยซูนี้ , ชั้นออม , บันทึกฉันตูด!


9
redbean เป็นมือลงชั้น abstraction ฐานข้อมูลที่ดีที่สุดที่ฉันเคยทำงานด้วย ไม่ใช่ "หนึ่งในดีที่สุด" - ดีที่สุด
Nir Gavish

หาดีมาก ฉันประทับใจมากกับ ORM นี้ที่จะพูดน้อย
Christopher Tarquini


1
เปรียบเทียบ RedBean กับ Doctrine: stackoverflow.com/questions/8063640/redbean-vs-doctrine
PiTheNumber

3
+1 +1 +1 +! +! !!!! ... พระเยซูฉันอ่านส่วนแรกของเอกสารและมันทำให้ฉันสร้างเสียงหัวเราะเผด็จการที่น่ากลัวและฉันกำลังดาวน์โหลดมันอยู่แล้ว!
KJW

45

: มีเพียงสองคนที่ดีมีหลักคำสอนและการขับเคลื่อน เราโปรดปรานหลักคำสอนและมันทำงานได้ดีกับSymfony อย่างไรก็ตามหากคุณกำลังมองหาการสนับสนุนฐานข้อมูลนอกเหนือจากหลักคุณจะต้องเขียนรหัสของคุณเอง


ขับเคลื่อนได้ค่อนข้างดีตามมาตรฐาน php มันสร้างโค้ดที่ค่อนข้างเป็นธรรมซึ่งเป็นมิตรกับ IDE กับ getters และ setters และระบบนามธรรมที่เป็นเกณฑ์ที่สะอาดมากสำหรับการสืบค้น
0x6A75616E

เนื่องจากคำถามนี้เชื่อมโยงกันไปเรื่อย ๆ ฉันอยากจะชี้ให้เห็นว่า Propel เป็นโครงการที่ถูกยกเลิกในปี 2020 ความเข้ากันได้ของ PHP7 ไม่เคยถูกนำมาใช้ ดังนั้นการเลือก Propel เป็น ORM สำหรับโครงการซอฟต์แวร์ใหม่ในปี 2020 จึงไม่ใช่ความคิดที่ดี
mrodo

34

Axon ORM เป็นส่วนหนึ่งของFat-Free Frameworkซึ่งเป็นคุณสมบัติของ mapper บนเครื่องบิน ไม่มีเครื่องกำเนิดรหัส ไม่มีไฟล์การกำหนดค่าXML / YAML ที่โง่ มันอ่านสกีมาฐานข้อมูลโดยตรงจากแบ็กเอนด์ดังนั้นในการดำเนินการCRUDส่วนใหญ่คุณไม่จำเป็นต้องขยายโมเดลพื้นฐาน สามารถทำงานร่วมกับเอ็นจิ้นฐานข้อมูลที่สนับสนุนPDOหลักทั้งหมด: MySQL , SQLite , SQL Server / Sybase, Oracle, 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();

ปลั๊กอินส่วนใหญ่และชั้นการเข้าถึงข้อมูล SQL ที่แนบมานั้นมีน้ำหนักเบาตามกรอบการทำงาน: 14 KB (Axon) + 6 KB (SQLdb) ปราศจากไขมันเพียง 55 KB


15
มันทำให้ฉันกังวลเสมอเมื่อฉันเห็นบางอย่าง$product->load('product_id=123')ในตัวอย่าง
Znarkus

9
สำหรับ paranoids รูปแบบทางเลือกคือ$product->load(array('product_id=:id',array(':id'=>123)));
bcosca

4
ปราศจากไขมันยังมี NoSQL ORMs สำหรับ MongoDB และไฟล์แบบแฟลต
bcosca

28

ฉันพัฒนา Pork.dbObject ด้วยตัวเอง (การใช้งาน PHP ORM อย่างง่ายและการใช้งาน Active Record) เหตุผลหลักคือฉันพบว่า ORM ส่วนใหญ่หนักเกินไป

ความคิดหลักของ Pork.dbObejct คือการมีน้ำหนักเบาและติดตั้งง่าย ไม่มีพวงของไฟล์ XML เพียงหนึ่งการเรียกใช้ฟังก์ชันในตัวสร้างเพื่อเชื่อมโยงและ addRelation หรือ addCustomRelation เพื่อกำหนดความสัมพันธ์กับ dbObject อื่น

ลองดู: Pork.dbObject


1
ฉันกำลังมองหาการใช้งาน PHP ORM น้ำหนักเบาในวันนี้และพบ Pork.dbObject ขอบคุณโพสต์นี้ มันใช้งานได้ดี! +1
E Dominique

6
Duude! มันค่อนข้างน่าสนใจ ฉันเห็นว่าการอัปเดตล่าสุดเกิดขึ้นที่ใดที่หนึ่งใน '09 สิ่งนี้ยังคงอยู่หรือไม่? ถ้าไม่ใช่ ... ฉันอาจจะฟื้นขึ้นมาใหม่ :) :)
VladFr

22

ลองหลักคำสอน 2 มันอาจเป็นเครื่องมือ ORM ที่ทรงพลังที่สุดสำหรับ PHP ฉันกำลังพูดถึงมันแยกจาก Doctrine 1 เพราะเป็นซอฟต์แวร์ที่แตกต่างอย่างสิ้นเชิง มันถูกเขียนใหม่ตั้งแต่ต้นยังอยู่ในช่วงเบต้า แต่มันสามารถใช้งานได้ในขณะนี้และพัฒนา

มันเป็น ORM ที่ซับซ้อนมาก แต่ออกแบบมาอย่างดี เวทย์มนตร์มากมายจาก Doctrine 1 ดั้งเดิมหายไป เป็นโซลูชันที่สมบูรณ์และคุณสามารถเขียน ORM ของคุณเองบน Doctrine2หรือใช้เลเยอร์เพียงชั้นเดียว


ปัญหาเดียวที่ฉันนึกถึง Doctrine2 คือมันขึ้นอยู่กับ PHP 5.3 ขึ้นไป
jblue

8
@jblue: มันไม่ใช่ปัญหามันเป็นคุณสมบัติ ;-) ไลบรารีขนาดใหญ่เช่น Doctrine ต้องการเนมสเปซ
Tom Pažourek

“ เวทย์มนตร์มากมายจากคำสอนดั้งเดิม 1 หายไป” - แง่บวกนี้คืออะไร?
Olivier 'Ölbaum' Scherler

13

ฉันเพิ่งเริ่มต้นกับKohanaและดูเหมือนว่าใกล้เคียงกับ Ruby on Rails โดยไม่ต้องกล่าวอ้างทุกความซับซ้อนของแฟ้มการกำหนดค่าหลายเช่นเดียวกับการขับเคลื่อน


ฉันยอมรับด้วยว่า Kohana เป็นกรอบที่คล้ายกับ RoR ในโลก PHP มากที่สุด สิ่งที่ขาดหายไปก็คือนั่งร้านและด้วยการสนับสนุนของ CLI ใน KO3 มันเป็นเพียงเรื่องของใครบางคนที่ทำแขนเสื้อขึ้นและทำมัน
Phillip Whelan

12

ตรวจสอบOutlet ออม มันง่ายกว่า Propel และ Doctrine และทำงานคล้ายกับ Hibernate มีเพียง PHP เท่านั้นที่รู้สึกได้


3
ฉันลองสิ่งนี้ ฉันต้องระบุคุณสมบัติของวัตถุเดียวกันใน 3 ที่ - config, model และ schema ฐานข้อมูล นั่นเป็นงานจำนวนมากสำหรับการนำ IMM ORM มาใช้
mixdev

Outlet เป็นอย่างมากการกำหนดค่าหนัก
Lotus Notes

ฉันได้ลองแล้ว (1.0 RC1) และมันก็บั๊กมากแม้ในฟังก์ชั่นหลัก และใช่มีการกำหนดค่าจำนวนมากที่จะเขียน ฉันไม่แนะนำ
Szymon Wygnański

11

ผมชอบขับเคลื่อน , ที่นี่คุณจะได้รับภาพรวมของเอกสารเป็นรักที่ดีและคุณสามารถได้รับมันผ่านลูกแพร์หรือ SVN

คุณจะต้องติดตั้ง PHP5 ที่ใช้งานได้และPhingเพื่อเริ่มสร้างคลาส


Propel ยังสามารถ 'reverse engineer' สกีมาฐานข้อมูลที่มีอยู่ - สร้างวัตถุ PHP จากการอ่านสกีมาฐานข้อมูล
David Goodwin

8

ผมพบว่าการเรียนที่เกี่ยวข้องกับการออมในห้องสมุด PHP อวด



6

ให้ยิงไปที่หอพักวัตถุ mapper สัมพันธ์สำหรับ PHP 5 สนับสนุนความสัมพันธ์ทุกประเภท (1 ต่อ 1), (1 ต่อหลายคน), (หลายต่อหลายคน) และประเภทข้อมูล มันไม่สร้างความรำคาญอย่างสมบูรณ์: ไม่จำเป็นต้องสร้างรหัสหรือขยายคลาส ในความเห็นของฉันมันเหนือกว่า ORM ใด ๆ ที่นั่นหลักคำสอนและการขับเคลื่อนรวมอยู่ด้วย อย่างไรก็ตามมันยังอยู่ในช่วงเบต้าและอาจมีการเปลี่ยนแปลงอย่างมีนัยสำคัญในอีกไม่กี่เดือนข้างหน้า http://www.getdorm.com

นอกจากนี้ยังมีช่วงการเรียนรู้ขนาดเล็กมาก สามวิธีหลักที่คุณจะใช้คือ:

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

4

ขณะนี้ฉันกำลังทำงานกับphpDataMapperซึ่งเป็น ORM ที่ออกแบบมาให้มีไวยากรณ์อย่างง่ายเช่นโครงการ Ruby Datamapper มันยังอยู่ในช่วงต้นของการพัฒนาเช่นกัน แต่มันใช้งานได้ดี


4

ฉันมีประสบการณ์ที่ดีกับIdiorm และปารีส Idiorm เป็นห้องสมุด ORM ขนาดเล็กที่เรียบง่าย ปารีสเป็นการนำ Active Record มาใช้อย่างง่ายไม่แพ้กัน มันมีไว้สำหรับ PHP 5.2+ ด้วย PDO มันสมบูรณ์แบบถ้าคุณต้องการบางสิ่งที่เรียบง่ายที่คุณสามารถวางลงในแอปพลิเคชันที่มีอยู่


4

พยายามออมของห้องสมุดอวด


ใช่ฉันได้ทำงานกับมันมาระยะหนึ่งแล้ว ความเจริญรุ่งเรืองนั้นยอดเยี่ยม แต่ออมยังคงมีงานต้องทำ การทำงานกับตารางการเข้าร่วมที่มีคุณสมบัติเพิ่มเติมหรือคีย์แปลกปลอมการสร้างวัตถุใหม่อาจค่อนข้างน่าเบื่อ การทำงานกับรุ่นที่เรียบง่ายเป็นเรื่องง่าย ดู Repose ORM หรือ Outlet สำหรับ ORM ทางเลือกสำหรับ PHP
Michael

3

จนกว่าการเปิดตัว PHP 5.3 จะไม่คาดว่าจะมี ORM ที่ดี มันเป็นข้อ จำกัด ของ OO ของ PHP


PHP 5.3 จะช่วยคนที่เขียน ORM ให้ดีขึ้นได้อย่างไร? ฉันไม่เห็นเหตุผลใด ๆ
Ionuț G. Stan

8
เหตุผลหลักคือการแนะนำของการรวมคงที่ปลาย (คำหลัก "คงที่") อ่านเกี่ยวกับเรื่องนี้ในblog.felho.hu/…
knoopx

2
ORM ไม่ต้องการตัวแปรสแตติกพวกเขาสามารถออกแบบได้ดีโดยใช้ตัวแปรอินสแตนซ์เท่านั้น
Tom Pažourek

จริงแล้วการรวมคงที่ล่าช้าเป็นเหตุผลที่ฉันสามารถรับ ORM แต่ละอินสแตนซ์ของ ORM ของฉันเองได้ต่ำมาก ก่อนที่จะผูกพันคงสายมันก็สิ้นเปลืองเหมือนคนอื่น ๆ ส่วนใหญ่
Xeoncross

3

เพื่อนของฉัน Kien และฉันได้ปรับปรุง ORM เวอร์ชันก่อนหน้าซึ่งเขาเขียนก่อน PHP 5.3 เราได้ทำการส่งข้อมูล Ruby กับActive Recordของ Rails ไปเป็น PHP มันยังขาดคุณสมบัติที่สำคัญบางอย่างที่เราต้องการเช่นการทำธุรกรรมการสนับสนุนคีย์หลักแบบคอมโพสิตอะแดปเตอร์เพิ่มอีกไม่กี่ตัว (เฉพาะ MySQL และ SQLite 3 เท่านั้น) แต่เราใกล้จะเสร็จสิ้นสิ่งนี้แล้ว คุณสามารถดูที่PHP ActiveRecord กับ PHP 5.3


3

ลอง PHP ADOdb

ฉันไม่สามารถพูดได้ว่าดีที่สุดเพราะฉันไม่ได้ใช้คนอื่น แต่มันเร็วมันรองรับMemcachedและแคช

และเร็วกว่าDB / Select ของ Zend Framework


2
adodb ให้ความสำคัญกับรสชาติของ Slim Model / Fat Controller มากขึ้นซึ่งโดยทั่วไปจะไม่ใช่สิ่งที่ดี
jblue

ADOdb มี ORM (แต่ไม่ใช่ ORM) มันเป็นวิธีแก้ปัญหาที่ยอดเยี่ยมจริงๆมันใช้งานได้ดีกว่า Zend สำหรับ DB (เช่นเดียวกับ ADOdb ที่ช้ากว่า ADOdb, Zend DB มีการ จำกัด การเข้าร่วมเพียงเล็กน้อย) รองรับการหลบหนีอัตโนมัติโดยใช้ parameterisation มีการออกแบบแคชที่ขยายได้ดีพร้อมการรวม memcache ที่ง่ายมาก ฉันไม่คิดว่ามันแม่นยำเลยที่จะบอกว่ามันให้ตัวเองกับการใช้งาน "ตัวแบบบาง / ตัวควบคุมไขมัน" (คุณสามารถทำสิ่งนั้นได้หรือไม่ แต่การออกแบบของ ADOdb ไม่ได้สนับสนุนอย่างใดอย่างหนึ่ง)
เลนคอลลินส์

3

มีลักษณะที่เป็นLEAP ออมสำหรับ Kohana จะทำงานร่วมกับพวงของฐานข้อมูลรวมทั้งDB2 , ฝน , Firebird , MariaDB , SQL Server, MySQL , Oracle, PostgreSQLและSQLite ด้วยฟังก์ชั่น autoload ง่าย ๆ มันสามารถทำงานกับเฟรมเวิร์ค PHP เกือบทุกชนิดได้ รหัสที่มาอยู่บนGitHubที่https://github.com/spadefoot/kohana-orm-leap คุณสามารถเช็คเอาต์บทแนะนำของ LEAPออนไลน์ได้

ไลบรารี ORM ทำงานกับคีย์หลักและคีย์คอมโพสิตที่ไม่ใช่จำนวนเต็ม การเชื่อมต่อได้รับการจัดการผ่านทางพูลการเชื่อมต่อฐานข้อมูลและทำงานกับเคียวรี SQL แบบ raw ORM มีตัวสร้างคิวรีที่ทำให้การสร้างคำสั่ง SQL ง่ายสุด ๆ


2

คุณสามารถตรวจสอบพักผ่อนถ้าคุณรู้สึกผจญภัย เช่นเดียวกับOutletมันเป็นแบบจำลองหลังจากHibernate

มันยังเร็วมากในการพัฒนา แต่จนถึงขณะนี้ข้อ จำกัด เพียงอย่างเดียวของแบบจำลองโดเมนคือคลาสไม่ได้ถูกทำเครื่องหมายสุดท้ายและคุณสมบัติไม่ได้ถูกทำเครื่องหมายว่าเป็นแบบส่วนตัว เมื่อฉันเข้าสู่ดินแดนของ PHP> = 5.3 ฉันจะพยายามนำการสนับสนุนสำหรับทรัพย์สินส่วนตัวมาใช้เช่นกัน


2

หากคุณกำลังมองหาการออมที่ดำเนินกระบวนทัศน์ข้อมูล Mapper มากกว่า Active Record เฉพาะแล้วฉันจะขอแนะนำให้คุณดูที่GacelaPHP

คุณสมบัติของ Gacela:

  • Data mapper
  • การทำแผนที่กุญแจต่างประเทศ
  • การทำแผนที่ความสัมพันธ์
  • การทำแผนที่ขึ้นอยู่กับ
  • การสืบทอดตารางคอนกรีต
  • วัตถุแบบสอบถาม
  • การทำแผนที่ข้อมูลเมตา
  • กำลังโหลดขี้เกียจและกระตือรือร้น
  • การสนับสนุนMemcachedเต็มรูปแบบ

วิธีการแก้ปัญหา ORM อื่น ๆ นั้นบวมเกินไปหรือมีข้อ จำกัด เป็นภาระเมื่อพัฒนาสิ่งที่ซับซ้อนจากระยะไกล Gacela แก้ไขข้อ จำกัด ของวิธีการบันทึกข้อมูลที่ใช้งานอยู่โดยใช้รูปแบบ Data Mapper ในขณะที่ทำให้ bloat มีค่าน้อยที่สุดโดยใช้PDOสำหรับการโต้ตอบทั้งหมดกับฐานข้อมูลและ Memcached


2

MicroMVC มีORMขนาด 13 KB ที่อาศัยคลาสฐานข้อมูล 8 KB เท่านั้น นอกจากนี้ยังส่งคืนผลลัพธ์ทั้งหมดเป็นวัตถุ ORM ด้วยตนเองและใช้การรวมคงที่ล่าช้าเพื่อหลีกเลี่ยงการฝังข้อมูลเกี่ยวกับตารางของวัตถุปัจจุบันและข้อมูลเมตาลงในแต่ละวัตถุ ส่งผลให้ค่าใช้จ่าย ORM ที่ถูกที่สุดมี

จะทำงานร่วมกับMySQL , PostgreSQLและSQLite


2

ออมบราซิล: http://www.hufersil.com.br/lumine ใช้งานได้กับ PHP 5.2+ ในความคิดของฉันมันเป็นตัวเลือกที่ดีที่สุดสำหรับชาวโปรตุเกสและชาวบราซิลเนื่องจากมีเอกสารที่เข้าใจง่ายและมีตัวอย่างมากมายสำหรับการดาวน์โหลด


2

ชุดเครื่องมือ Agileมีการติดตั้ง ORM / ActiveRecord และSQL แบบไดนามิกของตนเอง

บทนำ: http://agiletoolkit.org/intro/1

ไวยากรณ์ (Active Record):

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

ไวยากรณ์ (SQL แบบไดนามิก):

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

ในขณะที่แบบไดนามิก SQL และ Active Record / ออมสามารถใช้งานได้โดยตรงเปรียว Toolkit บูรณาการต่อไปพวกเขามีส่วนติดต่อผู้ใช้และ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 Faces สำหรับการขยาย PDO ดูPHP ใบหน้ากรอบ

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

1. ไซต์เป็นภาษาตุรกี 2. รหัสของคุณไม่ได้แตกต่างจากรหัสที่คุณใช้กับ Doctrine
Pellmeister

1

ดูhttp://code.google.com/p/lworm/ มันเป็นระบบ ORM ที่เรียบง่าย แต่ทรงพลังและมีน้ำหนักเบาสำหรับ PHP คุณสามารถขยายได้อย่างง่ายดายหากคุณต้องการ


1

อีกประการหนึ่งที่มาเปิดที่ดี PHP ออมที่เราใช้เป็นPHPSmartDb มีเสถียรภาพและทำให้รหัสของคุณปลอดภัยและสะอาดยิ่งขึ้น ฟังก์ชั่นฐานข้อมูลที่อยู่ภายในนั้นเป็นสิ่งที่ง่ายที่สุดที่ฉันเคยใช้กับ PHP 5.3


1

หลักคำสอนน่าจะเป็นทางออกที่ดีที่สุดของคุณ ก่อนที่จะมีการประกาศ DB_DataObjectเป็นหลักยูทิลิตี้อื่น ๆ ที่เปิดแหล่งที่มา


1

หากคุณกำลังมองหาการออมเช่นHibernateคุณควรมีลักษณะที่สำนักงานปลัดฯ

มันสามารถรวมได้อย่างง่ายดายในสถาปัตยกรรมSOA (มีเพียงคลาสเว็บเซอร์ในการพัฒนา)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.