Gibt es eine gute Objekt-Relational-Mapping-Bibliothek für PHP?
Ich kenne PDO /ADO, aber sie scheinen nur eine Abstraktion der Unterschiede zwischen Datenbankanbietern zu liefern, keine tatsächliche Zuordnung zwischen dem Domänenmodell und dem relationalen Modell. Ich suche eine PHP Bibliothek, die ähnlich funktioniert wie Hibernate für Java und NHibernate für .NET.
Schauen Sie in Lehre .
Doctrine 1.2 implementiert Active Record. Doctrine 2 + ist ein DataMapper-ORM.
Schauen Sie sich auch Xyster an. Es basiert auf dem Data Mapper-Muster.
Schauen Sie sich auch DataMapper vs. Active Record an.
Versuchen Sie RedBean , es erfordert:
Es erledigt sogar alle Sperren und Transaktionen für Sie und überwacht die Leistung im Hintergrund. (Mist! Es sammelt sogar Müll ....) Das Beste von allem ... du musst keine einzige ... Codezeile schreiben ... Jesus this, ORM-Ebene , hat mir den Arsch gerettet!
Axon ORM ist Teil des Fat-Free Framework - es verfügt über einen On-the-Fly-Mapper. Keine Codegeneratoren. Keine dummen XML/ YAML Konfigurationsdateien. Es liest das Datenbankschema direkt aus dem Backend, sodass Sie in den meisten CRUD -Operationen nicht einmal ein Basismodell erweitern müssen. Es funktioniert mit allen gängigen PDO - unterstützten Datenbank-Engines: MySQL , SQLite , SQL Server /Sybase, Oracle, PostgreSQL usw.
/* 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();
Das Plug-In und die zugehörige SQL-Datenzugriffsebene sind vor allem so leicht wie das Framework: 14 KB (Axon) + 6 KB (SQLdb). Fettfrei ist nur 55 KB.
Ich habe Pork.dbObject selbst entwickelt. (Eine einfache Implementierung von PHP ORM und Active Record) Der Hauptgrund ist, dass ich die meisten ORMs zu schwer finde.
Der Hauptgedanke von Pork.dbObejct ist, leicht und einfach einzurichten. Keine Menge von XML-Dateien, nur ein Funktionsaufruf im Konstruktor zum Binden und eine addRelation oder addCustomRelation zum Definieren einer Beziehung zu einem anderen dbObject.
Probieren Sie es aus: Pork.dbObject
Versuchen Sie Doctrine2 . Es ist wahrscheinlich das leistungsstärkste ORM-Tool für PHP. Ich erwähne es separat von Doctrine 1), da es sich um eine völlig andere Software handelt. Sie wurde von Grund auf neu geschrieben und befindet sich noch in der Betaphase, ist aber jetzt verwendbar und entwickelt.
Es ist ein sehr komplexes ORM, aber gut gestaltet. Viel Magie vom Original Doctrine 1 ist verschwunden. Es bietet eine vollständige Lösung, und Sie können schreiben Sie Ihr eigenes ORM auf Doctrine2 oder verwenden Sie nur eines seiner - Schichten .
Check out Outlet ORM . Es ist einfacher als Propel und Doctrine und es funktioniert ähnlich wie Hibernate, nur mit mehr Gefühl PHP).
Ich mag Propel , hier Sie können sich einen Überblick verschaffen, die Dokumentation ist ziemlich gut und Sie können es durchstehen PEAR oder SVN.
Sie benötigen nur eine funktionierende PHP5-Installation und Phing , um Klassen zu generieren.
Ich habe ORM-bezogene Klassen in der PHP library Flourish gefunden.
Sie sollten auschecken Idiorm und Paris .
Probieren Sie dORM, einen objektrelationalen Mapper für PHP 5 aus. Er unterstützt alle Arten von Beziehungen (1-zu-1), (1-zu-viele) ), (viele-zu-viele) und Datentypen. Es ist völlig unauffällig: Keine Codegenerierung oder Klassenerweiterung erforderlich. Meiner Meinung nach ist es jedem ORM auf dem Markt überlegen, Doctrine und Propel Es befindet sich jedoch noch in der Beta-Phase und wird sich in den nächsten Monaten möglicherweise erheblich ändern. http://www.getdorm.com
Es hat auch eine sehr kleine Lernkurve. Die drei wichtigsten Methoden, die Sie verwenden werden, sind:
<?php
$object = $dorm->getClassName('id_here');
$dorm->save($object);
$dorm->delete($object);
Ich arbeite gerade an phpDataMapper , einem ORM mit einfacher Syntax wie Rubys Datamapper-Projekt. Es ist auch noch in der frühen Entwicklung, aber es funktioniert großartig.
Versuchte die FORM of Flourish Bibliothek .
Mein Freund Kien und ich haben eine frühere Version eines ORM verbessert, die er vor PHP 5.3 geschrieben hatte. Wir haben im Wesentlichen über Ruby on Rails ' Active Record zu PHP. Es fehlen noch einige wichtige Funktionen, die wir wollen, wie Transaktionen, Unterstützung für zusammengesetzte Primärschlüssel, ein paar weitere Adapter (nur MySQL und SQLite 3 funktionieren derzeit). Aber wir sind sehr Sie können sich PHP ActiveRecord mit PHP 5..
Versuchen Sie PHP ADOdb.
Ich kann nicht sagen, dass es das Beste ist, weil ich die anderen nicht benutzt habe. Aber es ist schnell, es unterstützt Memcached und Caching.
Und es ist viel schneller als Zend Framework's DB/Select.
Ich habe großartige Erfahrungen mit Idiorm und Paris gemacht. Idiorm ist eine kleine, einfache ORM-Bibliothek. Paris ist eine ebenso einfache Implementierung von Active Record, die auf Idiorm basiert. Es ist für PHP 5.2+ mit PDO. Es ist perfekt, wenn Sie etwas Einfaches wollen, das Sie einfach in eine vorhandene Anwendung einfügen können.
Bis zur Veröffentlichung von PHP 5.3 wird kein guter ORM erwartet. Dies ist eine OO Einschränkung von PHP.
Schauen Sie sich das LEAP ORM für Kohana an. Es funktioniert mit einer Reihe von Datenbanken, einschließlich DB2 , Nieselregen , Firebird , MariaDB , SQL Server, MySQL , Oracle, PostgreSQL und SQLite . Mit einer einfachen Autoload-Funktion kann es mit fast jedem PHP Framework arbeiten. Der Quellcode ist auf GitHub um https://github.com/spadefoot/kohana-orm-leap . Sie können die LEAP-Tutorials auschecken online.
Die ORM-Bibliothek arbeitet mit nicht ganzzahligen Primärschlüsseln und zusammengesetzten Schlüsseln. Verbindungen werden über einen Datenbankverbindungspool verwaltet und können mit unformatierten SQL-Abfragen verarbeitet werden. Der ORM verfügt sogar über einen Abfrage-Generator, der das Erstellen von SQL-Anweisungen sehr einfach macht.
Sie können Pause auschecken, wenn Sie sich abenteuerlustig fühlen. Wie Outlet wird es nach Hibernate modelliert.
Es ist noch sehr früh in der Entwicklung, aber die einzigen Einschränkungen für das Domänenmodell bestehen darin, dass die Klassen nicht als endgültig und die Eigenschaften nicht als privat gekennzeichnet sind. Sobald ich mich mit PHP> = 5.3 befasst habe, werde ich versuchen, auch die Unterstützung für private Immobilien zu implementieren.
Brasilianischer ORM: http://www.hufersil.com.br/lumine . Es funktioniert mit PHP 5.2+. Meiner Meinung nach ist es die beste Wahl für Portugiesen und Brasilianer, da es eine leicht verständliche Dokumentation und viele Beispiele zum Herunterladen bietet.
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";
}
MicroMVC hat eine 13 KB ORM , die nur auf einer 8 KB Datenbankklasse basiert. Es gibt auch alle Ergebnisse als ORM-Objekte selbst zurück und verwendet eine späte statische Bindung, um zu vermeiden, dass Informationen über die Tabelle und die Metadaten des aktuellen Objekts in jedes Objekt eingebettet werden. Dies führt zu dem günstigsten ORM-Overhead, den es gibt.
Es funktioniert mit MySQL , PostgreSQL und SQLite .
Wenn Sie nach einem ORM suchen, das das Data Mapper-Paradigma und nicht speziell Active Record implementiert, empfehle ich Ihnen dringend, sich GacelaPHP anzuschauen.
Gacela bietet:
Andere ORM-Lösungen sind zu aufgebläht oder haben lästige Einschränkungen bei der Entwicklung von fernkomplizierten Dingen. Gacela behebt die Einschränkungen des Ansatzes für aktive Datensätze, indem das Data-Mapper-Muster implementiert wird, während die Aufblähung auf ein Minimum beschränkt wird, indem PDO für alle Interaktionen mit der Datenbank und Memcached verwendet wird.
Agile Toolkit hat eine eigene Implementierung von ORM/ActiveRecord und Dynamic SQL .
Einleitung: http://agiletoolkit.org/intro/1
Syntax (aktiver Datensatz):
$emp=$this->add('Model_Employee');
$emp['name']='John';
$emp['salary']=500;
$emp->save();
Syntax (dynamisches SQL):
$result = $emp->count()->where('salary','>',400)->getOne();
Während Dynamic SQL und Active Record/ORM direkt verwendet werden können, integriert Agile Toolkit sie weiter in die Benutzeroberfläche und jQuery UI . Dies ähnelt JSF , ist jedoch in reinem PHP geschrieben.
$this->add('CRUD')->setModel('Employee');
Dies zeigt AJAXified CRUD with for Employee model an.
PHP ORM Faces Für die PDO-Erweiterung. Siehe PHP Faces Framework.
$urun = new Product();
$urun->name='CPU'
$urun->prince='124';
$urun->save();
Ein weiteres großartiges Open Source PHP ORM, das wir verwenden, ist PHPSmartDb . Es ist stabil und macht Ihren Code sicherer und sauberer. Die Datenbankfunktionalität ist zweifellos die einfachste Ich habe jemals mit PHP 5.3.
Sado ist ein einfaches PHP= ORM-Paket, einfach zu bedienen und bietet Video-Tutorials
Ein wirklich gutes einfaches ORM ist MyActiveRecord . MyActiveRecord-Dokumentation . Ich habe es oft benutzt und kann sagen, dass es sehr einfach und gut getestet ist.
Schauen Sie sich http://code.google.com/p/lworm/ an. Es ist ein wirklich einfaches, aber leistungsstarkes, leichtes ORM-System für PHP. Sie können es auch problemlos erweitern, wenn Sie möchten.
Ich arbeite an miniOrm. Nur ein Mini-ORM, um Object Model & MySQL Abstraction Layer so einfach wie möglich zu nutzen. Hoffe es kann dir helfen: http://jelnivo.fr/miniOrm/
Lehre ist wahrscheinlich die beste Wahl. Vor Doctrine war DB_DataObject im Wesentlichen das einzige andere Dienstprogramm, das Open Source war.
Wenn Sie nach einem ORM wie Ruhezustand suchen, sollten Sie PMO ansehen.
Es kann leicht in eine SOA Architektur integriert werden (es ist nur eine Webservice-Klasse zu entwickeln).
Versuchen Sie PdoMap . Wikipedia behauptet, das sei von Hibernate inspiriert. Da ich Hibernate nie verwendet habe, kann ich nicht beurteilen :), aber ich würde aus meiner Erfahrung sagen, dass es sich um ein gutes und schnelles ORM handelt, das einfach zu implementieren ist und eine weniger steile Lernkurve aufweist als andere ORMs.
Das QCubed-Framework enthält ein fantastisches ORM ; Es basiert auf Code-Generierung und Scaffolding. Im Gegensatz zu ActiveRecord, das auf Reflektion basiert und im Allgemeinen langsam ist, werden bei der Codegenerierung Skelettklassen für Sie basierend auf der Datenbank erstellt und können anschließend angepasst werden. Es wirkt wie ein Zauber.
Sah Syrius ORM . Es ist ein neues ORM, das Projekt befand sich in einem Entwicklungsstadium, aber im nächsten Mund wird es in einer 1.0-Version veröffentlicht.