Une bonne bibliothèque PHP ORM?

y a-t-il une bonne bibliothèque de cartographie objet-relationnelle pour PHP?

je sais AOP /ADO, mais ils semblent seulement de fournir de l'abstraction des différences entre les fournisseurs de base de données n'est pas une véritable correspondance entre le modèle du domaine et le modèle relationnel. Je cherche une bibliothèque PHP qui fonctionne de la même manière que Hibernate fait pour Java et NHibernate fait pour .NET.

269
demandé sur Peter Mortensen 2008-09-20 20:44:52

30 réponses

Regarder dans Doctrine .

Doctrine 1.2 implements Active Record. Doctrine 2+ est un ORM DataMapper.

Aussi, découvrez Xyster . Il est basé sur le modèle de Données Mappeur.

aussi, jetez un oeil à DataMapper vs. Active Record .

112
répondu Ian P 2017-05-23 12:00:29

Essayer RedBean , son:

  • pas de configuration
  • Pas de base de données (il crée tout à la volée)
  • Pas de modèles
  • etc.

il effectue même toutes les opérations de fermeture et de transactions pour vous et surveille les performances en arrière-plan. (Diable! 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 , la couche ORM , m'a sauvé le cul!

98
répondu jnewman 2011-11-18 03:10:36

il n'y en a que deux bonnes: Doctrine et Propel . Nous privilégions la Doctrine, et cela fonctionne bien avec Symfony . Cependant, si vous cherchez un support de base de données en plus des principaux, vous devrez écrire votre propre code.

45
répondu Peter Mortensen 2011-11-02 21:16:44

Axon ORM fait partie du Fat-Free Framework - Il dispose d'un mapper à la volée. Pas de générateurs de code. Pas de stupide fichiers de configuration XML/ YAML . Il lit le schéma de la base de données directement à partir du backend, donc 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 moteurs de base de données majeurs PDO 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();

le plug-in et la couche D'accès aux données SQL qui l'accompagne sont tout aussi légers que le framework: 14 KB (Axon) + 6 KB (SQLdb). Sans graisse est seulement 55 KB.

33
répondu stillstanding 2012-03-27 08:02:18

j'ai développé du porc.dbObject sur mon propre. (Un simple ORM PHP et Active Record implementation) La raison principale est que je trouve la plupart des ORMs trop lourds.

L'idée principale que de la viande de Porc.dbObejct doit être léger et simple à installer. Pas de bouquet de fichiers XML, juste un appel de fonction dans le constructeur pour le lier, et une addrélation ou addcustomrélation pour définir une relation à un autre objet dbob.

"151900920 de lui" Donner un coup d'oeil: la viande de Porc.dbObject

28
répondu SchizoDuckie 2012-03-27 10:57:36

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

C'est un ORM très complexe, mais bien conçu. Beaucoup de magie de la Doctrine originale 1 a disparu. Il fournit une solution complète, et vous pouvez écrire votre propre ORM en plus de la Doctrine2 ou n'utiliser qu'une de ses couches .

22
répondu tomp 2012-04-08 10:21:21

Check out Outlet ORM . Il est plus simple que le propulseur et la Doctrine et il fonctionne similaire à L'hibernation, seulement avec plus D'une sensation PHP à elle.

12
répondu Alvaro 2008-09-22 20:22:36

je viens de commencer avec Kohana , et il semble le plus proche de Ruby on Rails sans invoquer toute la complexité des fichiers de configuration multiples comme avec Propel .

12
répondu Zak 2011-11-02 21:20:41

j'aime Propulser , ici vous pouvez obtenir un aperçu, la documentation est assez bonne, et vous pouvez l'obtenir par le biais de la POIRE ou SVN.

vous n'avez besoin que D'une installation PHP5 et Phing pour démarrer les classes de génération.

11
répondu CMS 2008-09-20 18:36:33

j'ai trouvé des classes relatives à ORM dans la bibliothèque PHP Flourish .

8
répondu VDVLeon 2012-03-27 08:03:01

Donner un coup dortoir, un object relational mapper pour PHP 5 . Il prend en charge tous les types de relations (1 pour 1), (1-to-many), (plusieurs-à-plusieurs) et types de données. Il est complètement discret: aucune génération de code ou classe d'extension nécessaire. À mon avis, il est supérieur à n'importe quel ORM là-bas, Doctrine et propulseur inclus. Cependant, il est encore en phase de bêta et pourrait changer de manière significative au cours des prochains mois. http://www.getdorm.com

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

<?php 
$object = $dorm->getClassName('id_here');
$dorm->save($object);
$dorm->delete($object);
6
répondu Olivier Lalonde 2009-04-28 01:28:12

vous devez cocher Idiorm et Paris .

6
répondu Peter Mortensen 2012-03-27 08:57:16

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

4
répondu Vance Lucas 2009-01-13 19:52:36
4
répondu eaguilar 2012-03-27 08:04:58

Jusqu'à ce que la version 5.3 de PHP ne s'attend pas à avoir un bon ORM. C'est une limitation OO de PHP.

3
répondu knoopx 2009-03-01 11:37:59

j'ai eu de grandes expériences avec Idiorm et Paris . Idiorm est une petite bibliothèque ORM simple. Paris est un simple Active Record implementation construit sur Idiorm. C'est pour PHP 5.2+ avec PDO. Il est parfait si vous voulez quelque chose de simple que vous pouvez déposer dans une application existante.

3
répondu Sander Marechal 2011-07-10 22:03:18

mon ami Kien et moi avons amélioré une version antérieure d'un ORM qu'il avait écrit avant PHP 5.3. Nous avons essentiellement porté sur Ruby on Rails Active Record à PHP. Il manque encore certaines fonctionnalités clés que nous voulons telles que les transactions, le support de la clé primaire composite, quelques adaptateurs supplémentaires (seuls MySQL et SQLite 3 fonctionnent en ce moment). Mais, nous sommes sur le point de finir ce truc. Vous pouvez jeter un oeil à PHP ActiveRecord avec PHP 5.3 .

3
répondu 2 revs, 2 users 50%Jacques Fuentes 2012-03-24 07:29:36

Try PHP ADOdb.

Je ne peux pas dire que c'est le mieux, 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
répondu Peter Mortensen 2012-03-24 07:32:36

Avoir un coup d'oeil à la SAUT de l'ORM pour Kohana . Il fonctionne avec un tas de bases de données, y compris DB2 , Bruine , Firebird , MariaDB , SQL Server, MySQL , Oracle PostgreSQL , et SQLite . Avec une fonction simple autoload, il peut fonctionner avec presque n'importe quel framework PHP. Le code source est sur GitHub à https://github.com/spadefoot/kohana-orm-leap . Vous pouvez vérifier tutoriels LEAP en ligne.

la bibliothèque ORM fonctionne avec des clés primaires non-entières et des clés composites. Les connexions sont gérées via un pool de connexion de base de données et cela fonctionne avec des requêtes SQL brutes. L'ORM a même un constructeur de requêtes qui rend la construction D'énoncés SQL très simple.

3
répondu Matthew 2012-03-27 11:37:49

consultez Repos si vous vous sentez aventureux. Comme Outlet , il est modelé 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és final et les propriétés ne sont pas marqués privé. Une fois que je suis dans le pays de PHP >= 5.3, je vais essayer d'implémenter le support pour les propriétés privées aussi.

2
répondu Beau Simensen 2009-01-05 03:44:47

si vous êtes à la recherche d'un ORM qui implémente le paradigme Data Mapper plutôt que Active Record spécifiquement, alors je vous suggérerais fortement de jeter un oeil à GacelaPHP .

Gacela caractéristiques:

  • mapper des Données
  • clé Étrangère "mappage de 151980920"
  • cartographie de l'Association
  • cartographie dépendante
  • table en béton héritage
  • "151970920 de la Requête" objet
  • mappage des Métadonnées
  • Paresseux et désireux de chargement
  • Full Memcached support

D'autres solutions ORM sont trop gonflées ou ont des limites lourdes lors du développement de quelque chose de quelque peu compliqué. Gacela résout les limites de l'approche active record en mettant en œuvre le modèle Data Mapper tout en maintenant le bloat à un niveau acceptable. minimum en utilisant PDO pour toutes les interactions avec la base de données et Memcached.

2
répondu Noah Goodrich 2012-03-27 08:38:24

MicroMVC a un 13 KB ORM qui repose seulement sur un 8 KB classe de base de données . Il renvoie également tous les résultats sous forme d'objets ORMS eux-mêmes et utilise la liaison statique tardive pour éviter d'intégrer des informations sur la table de l'objet courant et des méta-données dans chaque objet. Il en résulte le moins cher ORM overhead Il ya.

il fonctionne avec MySQL , PostgreSQL , et SQLite .

2
répondu Peter Mortensen 2012-03-27 09:36:19

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

2
répondu Paulo Araujo 2012-04-08 10:28:14

Agile Toolkit a sa propre implémentation unique D'ORM/ActiveRecord et dynamic SQL .

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

Syntaxe (Active Record):

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

syntaxe (Dynamic SQL):

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

tandis que le SQL dynamique et le Active Record/ORM est utilisable directement, Agile Toolkit en outre les intègre avec 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 D'employé.

2
répondu romaninsh 2012-05-13 21:08:12

Nobm

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
répondu Charlie Chai 2012-08-03 12:18:55

je travaille sur miniOrm. Juste un mini ORM, pour utiliser le modèle D'objet et la couche D'Abstraction MySQL aussi simplement que possible. J'espère qu'il pourra vous aider: http://jelnivo.fr/miniOrm/

2
répondu Cédric Mouleyre 2012-10-27 17:22:03

PHP ORM Faces For PDO extension. Voir PHP Visages Cadre .

$urun = new Product();
$urun->name='CPU'
$urun->prince='124';
$urun->save();
2
répondu Kurt 2012-11-16 19:21:32

regardez http://code.google.com/p/lworm / . C'est un système ORM très simple, mais puissant et léger pour PHP. Vous pouvez aussi facilement l'étendre, si vous voulez.

1
répondu Faz 2010-11-19 16:07:15

un autre grand ORM PHP open source que nous utilisons est PHPSmartDb . Il est stable et rend votre code plus sûr et propre. La fonctionnalité de base de données qu'il contient est la plus facile que J'ai utilisée avec PHP 5.3.

1
répondu Joe 2011-03-15 06:57:47

Doctrine est probablement votre meilleur pari. Avant la Doctrine, DB_DataObject était essentiellement la seule autre utilité qui a été ouverte source.

1
répondu 2 revs, 2 users 73%anon 2011-11-02 21:18:47