it-swarm.com.de

Gut PHP ORM Library?

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.

269
sgibbons

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.

116
Ian P

Versuchen Sie RedBean , es erfordert:

  • Keine Konfiguration
  • Keine Datenbank (alles wird im Handumdrehen erstellt)
  • Keine Modelle
  • usw.

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!

101
winterswk

Es gibt nur zwei gute: Lehre und Antrieb . Wir bevorzugen Doctrine und es funktioniert gut mit Symfony . Wenn Sie jedoch neben den Hauptdatenbankunterstützung suchen, müssen Sie Ihren eigenen Code schreiben.

45
Ilya Kochetov

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.

33
bcosca

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

28
SchizoDuckie

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 .

22
Tom Pažourek

Ich habe gerade mit Kohana begonnen, und es scheint am nächsten an Ruby on Rails) zu sein, ohne die Komplexität mehrerer Konfigurationsdateien wie aufzurufen mit Propel .

13
Zak

Check out Outlet ORM . Es ist einfacher als Propel und Doctrine und es funktioniert ähnlich wie Hibernate, nur mit mehr Gefühl PHP).

12
Alvaro

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.

11
CMS

Ich habe ORM-bezogene Klassen in der PHP library Flourish gefunden.

8
VDVLeon

Sie sollten auschecken Idiorm und Paris .

6
th3mus1cman

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);
6
Olivier Lalonde

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.

4
Vance Lucas
4
eaguilar

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..

3
Jacques Fuentes

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.

3
Salam Fall

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.

3
Sander Marechal

Bis zur Veröffentlichung von PHP 5.3 wird kein guter ORM erwartet. Dies ist eine OO Einschränkung von PHP.

3
knoopx

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.

3
Matthew

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.

2
Beau Simensen

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.

2
Paulo Araujo

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
Charlie Chai

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 .

2
Xeoncross

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:

  • Daten-Mapper
  • Fremdschlüsselzuordnung
  • Assoziationszuordnung
  • Abhängiges Mapping
  • Konkrete Tabellenvererbung
  • Objekt abfragen
  • Metadaten-Mapping
  • Faules & eifriges Laden
  • Volle Memcached Unterstützung

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.

2
Noah Goodrich

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.

2
romaninsh

PHP ORM Faces Für die PDO-Erweiterung. Siehe PHP Faces Framework.

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

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.

1
Joe

Sado ist ein einfaches PHP= ORM-Paket, einfach zu bedienen und bietet Video-Tutorials

1
Shay Anderson

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.

1

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.

1
Faz

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/

1

Lehre ist wahrscheinlich die beste Wahl. Vor Doctrine war DB_DataObject im Wesentlichen das einzige andere Dienstprogramm, das Open Source war.

1
anon

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).

1
anonymous

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.

1
Hydrino

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.

1
Alex Weinstein

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.

1
biancardi