web-dev-qa-db-fra.com

Bonne PHP Bibliothèque ORM?

Existe-t-il une bonne bibliothèque de mapping objet-relationnel pour PHP?

Je connais PDO /ADO, mais ils ne semblent fournir qu'une abstraction des différences entre les fournisseurs de bases de données et non un mappage réel entre le modèle de domaine et le modèle relationnel. Je recherche une bibliothèque PHP qui fonctionne de la même manière que Hibernate le fait pour Java et que NHibernate le fait pour .NET.

269
sgibbons

Regardez dans Doctrine .

Doctrine 1.2 implémente Active Record. Doctrine 2 + est un ORL DataMapper.

En outre, consultez Xyster . Il est basé sur le modèle Data Mapper.

Regardez aussi DataMapper vs. Active Record .

116
Ian P

Essayez RedBean , cela nécessite:

  • Pas de configuration
  • Pas de base de données (tout est créé à la volée)
  • Aucun modèle
  • etc.

Il effectue même tout le verrouillage et les transactions pour vous et surveille les performances en arrière-plan. (Heck! Il fait même la collecte des ordures ....) Le meilleur de tous ... vous n'avez pas à écrire une seule ... ligne de code ... Jésus this, couche ORM , m'a sauvé le cul!

101
winterswk

Il n'y a que deux bons: Doctrine et Propel . Nous favorisons Doctrine, et cela fonctionne bien avec Symfony . Toutefois, si vous recherchez un support de base de données en plus des principaux, vous devrez écrire votre propre code.

45
Ilya Kochetov

Axon ORM fait partie du Fat-Free Framework - il dispose d'un mappeur à la volée. Pas de générateurs de code. Pas de stupide XML/ YAML fichiers de configuration. Il lit le schéma de base de données directement à partir du backend. Ainsi, dans la plupart des opérations CRUD , vous n'avez même pas besoin d'étendre un modèle de base. Il fonctionne avec tous les principaux PDO - moteurs de base de données pris en charge: MySQL , SQLite , SQL Server /Sybase, Oracle, PostgreSQL , etc.

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

Surtout, le plug-in et la couche d'accès aux données SQL qui l'accompagne sont aussi légers que le cadre: 14 Ko (Axon) + 6 Ko (SQLdb). Fat-Free est juste 55 KB.

33
bcosca

J'ai développé Pork.dbObject moi-même. (Une simple implémentation PHP ORM et Active Record) La raison principale est que je trouve la plupart des ORM trop lourds.

L'idée principale de Pork.dbObejct est d'être léger et simple à installer. Pas de tas de fichiers XML, juste un appel de fonction dans le constructeur pour le lier, et un addRelation ou addCustomRelation pour définir une relation à un autre dbObject.

Donnez-lui un coup d'oeil: Pork.dbObject

28
SchizoDuckie

Essayez Doctrine2 . C'est probablement l'outil ORM le plus puissant pour PHP. Je le mentionne séparément de Doctrine 1, car il s'agit d'un logiciel complètement différent. Il a été réécrit à partir de zéro, est toujours en phase bêta, mais il est maintenant utilisable et développé.

C'est un ORM très complexe, mais bien conçu. Beaucoup de magie de l'original Doctrine 1 a disparu. Il fournit une solution complète et vous pouvez écrivez votre propre ORM sur Doctrine2 ou utilisez seulement l'un de ses couches .

22
Tom Pažourek

Je viens de commencer avec Kohana , et il semble que ce soit le plus proche de Ruby sur Rails sans appeler toute la complexité de plusieurs fichiers de configuration comme avec Propel .

13
Zak

Départ Outlet ORM . Il est plus simple que Propel et Doctrine et fonctionne de manière similaire à Hibernate, mais avec plus de PHP sensations.

12
Alvaro

J'aime beaucoup Propel , ici vous pouvez avoir une vue d'ensemble, le documentation est très bon et vous pouvez l'obtenir par le biais de PEAR ou SVN.

Vous avez seulement besoin d’une installation PHP5 fonctionnelle et de Phing pour commencer à générer des classes.

11
CMS

J'ai trouvé des classes liées à ORM dans la bibliothèque PHP Flourish .

8
VDVLeon

Vous devriez vérifier Idiorm et Paris .

6
th3mus1cman

Donnez un coup de feu à dORM, un mappeur relationnel d'objet pour PHP 5 . Il prend en charge toutes sortes de relations (1 à 1), (1 à plusieurs), (plusieurs à plusieurs) et types de données. Il est complètement discret: aucune génération de code ou extension de classe n’est requise. À mon avis, il est supérieur à tous les ORM, Doctrine et Propel inclus. Cependant, il est toujours en version bêta et pourrait changer considérablement au cours des deux prochains mois. http://www.getdorm.com

Il a également une très petite courbe d'apprentissage. Les trois méthodes principales que vous utiliserez sont:

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

Je travaille actuellement sur phpDataMapper , qui est un ORM conçu pour avoir une syntaxe simple comme le projet Ruby Datamapper. Il en est encore à ses débuts, mais cela fonctionne très bien.

4
Vance Lucas
4
eaguilar

Mon ami Kien et moi avons amélioré une version antérieure d'un ORM qu'il avait écrite avant le PHP 5.3. Nous avons essentiellement porté sur Ruby on Rails ' Active Record en PHP. Il manque toujours certaines fonctionnalités clés souhaitées, telles que les transactions, la prise en charge de la clé primaire composite, et quelques adaptateurs supplémentaires (seuls MySQL et SQLite 3 fonctionnent actuellement). Mais nous sommes sur le point de terminer ce travail. Vous pouvez consulter PHP ActiveRecord avec PHP 5..

3
Jacques Fuentes

Essayez PHP ADOdb.

Je ne peux pas dire que c'est le meilleur, parce que je n'ai pas utilisé les autres. Mais c'est rapide, il supporte Memcached et la mise en cache.

Et c'est plus rapide que Zend Framework DB/Select.

3
Salam Fall

J'ai eu de grandes expériences avec Idiorm et Paris . Idiorm est une petite bibliothèque ORM simple. Paris est une implémentation Active Record tout aussi simple construite sur Idiorm. C'est pour PHP 5.2+ avec PDO. C'est parfait si vous voulez quelque chose de simple que vous pouvez simplement insérer dans une application existante.

3
Sander Marechal

Jusqu'au PHP 5.3 version ne vous attendez pas à avoir un bon ORM. C'est une OO limitation de PHP.

3
knoopx

Regardez le LEAP ORM pour Kohana . Cela fonctionne avec un tas de bases de données, y compris DB2 , Bruine , Firebird , MariaDB , SQL Server, - MySQL , Oracle, PostgreSQL , et SQLite . Avec une simple fonction de chargement automatique, il peut fonctionner avec presque tous les frameworks PHP. Le code source est sur GitHub à https://github.com/spadefoot/kohana-orm-leap . Vous pouvez passer à la caisse tutoriels LEAP en ligne.

La bibliothèque ORM fonctionne avec des clés primaires et des clés composites non entières. Les connexions sont gérées via un pool de connexions de base de données et cela fonctionne avec des requêtes SQL brutes. L'ORM a même un générateur de requêtes qui simplifie la construction d'instructions SQL.

3
Matthew

Vous pouvez vérifier Repose si vous vous sentez aventureux. Comme Outlet , il est modélisé d'après Hibernate .

Il est encore très tôt dans son développement, mais jusqu'à présent, les seules restrictions sur le modèle de domaine sont que les classes ne sont pas marquées comme finales et que les propriétés ne sont pas marquées comme privées. Une fois que j’entrerai dans le pays de PHP> = 5.3, je tenterai également d’implémenter la prise en charge des propriétés privées.

2
Beau Simensen

ORM brésilien: http://www.hufersil.com.br/lumine . Cela fonctionne avec PHP 5.2+. À mon avis, c'est le meilleur choix pour les Portugais et les Brésiliens, car sa documentation est facile à comprendre et de nombreux exemples à télécharger.

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 a un 13 Ko ORM qui ne repose que sur un 8 Ko classe de base de données . Il renvoie également tous les résultats sous forme d'objets ORM eux-mêmes et utilise une liaison statique récente pour éviter d'incorporer des informations sur la table et les métadonnées de l'objet en cours dans chaque objet. Il en résulte les frais généraux ORM les moins chers.

Cela fonctionne avec MySQL , PostgreSQL , et SQLite .

2
Xeoncross

Si vous recherchez un ORM qui implémente le paradigme Data Mapper plutôt que Active Record, je vous suggère fortement de jeter un oeil sur GacelaPHP .

Caractéristiques Gacela:

  • Mappeur de données
  • Mappage de clé étrangère
  • Cartographie d'association
  • Cartographie dépendante
  • Héritage de table en béton
  • Objet de requête
  • Cartographie de métadonnées
  • Chargement paresseux et désireux
  • Complet Memcached support

D'autres solutions ORM sont trop lourdes ou ont de lourdes limitations lors du développement de tout ce qui est compliqué à distance. Gacela résout les limites de l'approche d'enregistrement actif en implémentant le modèle de mappeur de données tout en minimisant le gonflement en utilisant PDO pour toutes les interactions avec la base de données et Memcached.

2
Noah Goodrich

Agile Toolkit possède sa propre implémentation unique de ORM/ActiveRecord et SQL dynamique .

Introduction: http://agiletoolkit.org/intro/1

Syntaxe (enregistrement actif):

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

Syntaxe (SQL dynamique):

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

Alors que Dynamic SQL et Active Record/ORM peuvent être utilisés directement, Agile Toolkit les intègre davantage à l’interface utilisateur et jQuery UI . Ceci est similaire à JSF mais écrit en PHP pur.

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

Cela affichera AJAXified CRUD avec pour le modèle Employee.

2
romaninsh

PHP ORM Faces Pour l'extension PDO. Voir Framework PHP Faces.

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

Un autre excellent source ouvert PHP ORM que nous utilisons est PHPSmartDb . Il est stable et rend votre code plus sûr et plus propre. La fonctionnalité de base de données qu'il contient est sans conteste la plus simple que j'ai jamais utilisée avec PHP 5.3.

1
Joe

Sado est un simple package PHP ORM, facile à utiliser et qui propose des didacticiels vidéo.

1
Shay Anderson

Un très bon ORM simple est MyActiveRecord . documentation MyActiveRecord . Je l'utilise beaucoup et je peux dire que c'est très simple et bien testé.

1
Szymon Wygnański

Regardez http://code.google.com/p/lworm/ . C'est un système ORM léger, simple mais puissant, pour PHP. Vous pouvez également facilement l'étendre si vous le souhaitez.

1
Faz

Je travaille sur miniOrm. Juste un mini ORM, pour utiliser aussi simplement que possible la couche d’abstraction MySQL & MySQL. J'espère que cela vous aidera: http://jelnivo.fr/miniOrm/

1
Cédric Mouleyre

La doctrine est probablement votre meilleur pari. Avant Doctrine, DB_DataObject était essentiellement le seul autre utilitaire à source ouverte.

1
anon

Si vous cherchez un ORM, comme Hibernate , vous devriez regarder PMO .

Il peut être facilement intégré dans une architecture SOA (il n’ya qu’une classe de services Web à développer).

1
anonymous

Essayez PdoMap . Wikipedia affirme que c'est inspiré par Hibernate. Comme je n'ai jamais utilisé Hibernate, je ne peux pas en juger :), mais d'après mon expérience, je dirais qu'un ORM est bon et rapide, qu'il est facile à mettre en œuvre et que la courbe d'apprentissage est moins raide que celle des autres ORM.

1
Hydrino

Il y a un ORM fantastique inclus dans le framework QCubed ; il est basé sur la génération de code et l'échafaudage. Contrairement à ActiveRecord basé sur la réflexion et généralement lent, la génération de code crée des classes squelettes pour vous en fonction de la base de données et vous permet de les personnaliser par la suite. Il fonctionne comme un charme.

1
Alex Weinstein

Regardé Syrius ORM . C'est un nouvel ORM, le projet en était au stade du développement, mais il sera bientôt disponible dans une version 1.0.

1
biancardi