mejor - Buena biblioteca de PHP ORM?
orm php doctrine (30)
Acabo de empezar con Kohana , y parece ser lo más parecido a Ruby on Rails sin invocar toda la complejidad de varios archivos de configuración como con Propel .
¿Existe una buena biblioteca de mapeo de objetos relacionales para PHP?
Sé de PDO / ADO, pero parece que solo proporcionan un resumen de las diferencias entre los proveedores de bases de datos, no una asignación real entre el modelo de dominio y el modelo relacional. Estoy buscando una biblioteca de PHP que funcione de manera similar a como lo hace Hibernate para Java y NHibernate para .NET.
Actualmente estoy trabajando en phpDataMapper , que es un ORM diseñado para tener una sintaxis simple como el proyecto Datamapper de Ruby. Todavía está en desarrollo temprano también, pero funciona muy bien.
Axon ORM es parte del marco libre de grasa : cuenta con un mapeador sobre la marcha. No hay generadores de código. No hay archivos de configuración XML / YAML estúpidos. Lee el esquema de la base de datos directamente desde el backend, por lo que en la mayoría de las operaciones de CRUD ni siquiera tiene que extender un modelo base. Funciona con todos los principales motores de bases de datos compatibles con PDO : 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();
Más que nada, el complemento y la capa de acceso a datos SQL que lo acompaña son tan ligeros como el marco: 14 KB (Axon) + 6 KB (SQLdb). Sin grasa es de solo 55 KB.
Consulte http://code.google.com/p/lworm/ . Es un sistema ORM muy simple, pero potente y ligero para PHP. También puedes extenderlo fácilmente, si quieres.
Dale una oportunidad a dORM, un mapeador relacional de objetos para PHP 5 . Admite todo tipo de relaciones (1 a 1), (1 a muchos), (muchos a muchos) y tipos de datos. Es completamente discreto: no es necesario generar código o extender la clase. En mi opinión, es superior a cualquier ORM, Doctrine y Propel incluidos. Sin embargo, todavía está en fase beta y podría cambiar significativamente en los próximos dos meses. http://www.getdorm.com
También tiene una curva de aprendizaje muy pequeña. Los tres métodos principales que utilizará son:
<?php
$object = $dorm->getClassName(''id_here'');
$dorm->save($object);
$dorm->delete($object);
Deberías echar un vistazo a Idiorm y París .
Echa un vistazo a Outlet ORM . Es más simple que Propel y Doctrine y funciona de forma similar a Hibernate, solo que tiene una sensación más de PHP.
Echa un vistazo al LEAP ORM para Kohana . Funciona con varias bases de datos, incluidas DB2 , Drizzle , Firebird , MariaDB , SQL Server, MySQL , Oracle, PostgreSQL y SQLite . Con una simple función de carga automática, puede funcionar con casi cualquier marco PHP. El código fuente está en GitHub en https://github.com/spadefoot/kohana-orm-leap . Puede consultar los tutoriales de LEAP en línea.
La biblioteca ORM funciona con claves primarias no integradas y claves compuestas. Las conexiones se administran a través de un grupo de conexiones de base de datos y funciona con consultas de SQL sin procesar. El ORM incluso tiene un generador de consultas que hace que la construcción de sentencias SQL sea muy simple.
Encontré clases relacionadas con ORM en la biblioteca PHP Flourish .
Hasta la versión PHP 5.3 no esperes tener un buen ORM. Es una limitación OO de PHP.
He estado desarrollando Pork.dbObject por mi cuenta. (Una implementación simple de PHP ORM y Active Record) La razón principal es que encuentro que la mayoría de los ORM son demasiado pesados.
El pensamiento principal de Pork.dbObejct es ser ligero y fácil de configurar. No hay un montón de archivos XML, solo una llamada de función en el constructor para enlazarlo, y addRelation o addCustomRelation para definir una relación con otro dbObject.
Dale un vistazo: Pork.dbObject
He tenido grandes experiencias con Idiorm y París . Idiorm es una biblioteca ORM pequeña y simple. París es una implementación de Registro Activo igualmente simple construida en Idiorm. Es para PHP 5.2+ con DOP. Es perfecto si desea algo simple que solo puede colocar en una aplicación existente.
La doctrina es probablemente tu mejor apuesta. Antes de Doctrine, DB_DataObject era esencialmente la única otra utilidad de código abierto.
Mi amigo Kien y yo hemos mejorado una versión anterior de un ORM que había escrito antes de PHP 5.3. Básicamente, hemos transferido el registro activo de Ruby on Rails a PHP. Todavía nos faltan algunas características clave que queremos, como transacciones, soporte de clave principal compuesta, algunos adaptadores más (solo MySQL y SQLite 3 funcionan en este momento). Pero estamos muy cerca de terminar esto. Puedes echar un vistazo a PHP ActiveRecord con PHP 5.3 .
MicroMVC tiene un ORM 13 KB que solo se basa en una clase de base de datos de 8 KB. También devuelve todos los resultados como objetos ORM en sí mismos y utiliza un enlace estático tardío para evitar incrustar información sobre la tabla y los metadatos del objeto actual en cada objeto. Esto da como resultado la sobrecarga de ORM más barata que existe.
Funciona con MySQL , PostgreSQL y SQLite .
Mira en Doctrine .
Doctrine 1.2 implementa Active Record. Doctrine 2+ es un ORM DataMapper.
También, echa un vistazo a Xyster . Se basa en el patrón Data Mapper.
También, eche un vistazo a DataMapper vs. Active Record .
ORM brasileño: http://www.hufersil.com.br/lumine . Funciona con PHP 5.2+. En mi opinión, es la mejor opción para los portugueses y brasileños, ya que tiene documentación fácil de entender y muchos ejemplos para descargar.
Otro gran ORM de código abierto de PHP que usamos es PHPSmartDb . Es estable y hace que su código sea más seguro y limpio. La funcionalidad de la base de datos dentro de ella es indiscutiblemente la más fácil que he usado con PHP 5.3.
PHP ORM Faces para extensión de DOP. Ver PHP Faces Framework .
$urun = new Product();
$urun->name=''CPU''
$urun->prince=''124'';
$urun->save();
Probé la biblioteca ORM de Flourish .
Prueba RedBean , requiere:
- Sin configuracion
- No hay base de datos (crea todo sobre la marcha)
- No modelos
- etc.
Incluso hace todo el bloqueo y las transacciones para usted y supervisa el rendimiento en segundo plano. (¡Diablos! Incluso hace la recolección de basura ...) Lo mejor de todo ... no tienes que escribir una sola ... línea de código ... ¡Jesús, capa de ORM , me salvaste el culo!
Prueba Doctrine2 . Es probablemente la herramienta ORM más poderosa para PHP. Lo menciono por separado de Doctrine 1, porque es una pieza de software completamente diferente. Se ha reescrito desde cero, aún está en fase beta, pero ahora se puede usar y desarrollar.
Es un ORM muy complejo, pero bien diseñado. Mucha magia de la Doctrina 1 original desapareció. Proporciona una solución completa, y puede escribir su propio ORM sobre Doctrine2 o usar solo una de sus layers .
Pruebe PHP ADOdb.
No puedo decir que sea lo mejor, porque no he usado los demás. Pero es rápido, soporta Memcached y caché.
Y es mucho más rápido que el DB / Select de Zend Framework .
Puedes echar un vistazo a Repose si te sientes aventurero. Al igual que Outlet , se modela después de Hibernate .
Todavía es muy temprano en su desarrollo, pero hasta ahora las únicas restricciones en el modelo de dominio son que las clases no están marcadas como finales y las propiedades no están marcadas como privadas. Una vez que llegue a la tierra de PHP> = 5.3, intentaré implementar el soporte para propiedades privadas también.
Realmente me gusta Propel , here puede obtener una visión general, la documentation es bastante buena y puede obtenerla a través de PEAR o SVN.
Solo necesita una instalación de PHP5 que funcione, y Phing para comenzar a generar clases.
Si está buscando un ORM que implemente el paradigma de Data Mapper en lugar de Active Record específicamente, entonces le sugiero que eche un vistazo a GacelaPHP .
Características de Gacela:
- Mapeador de datos
- Mapeo de clave externa
- Asociación de mapeo
- Mapeo dependiente
- Herencia de la mesa de concreto
- Objeto de consulta
- Mapeo de metadatos
- Carga perezosa y ansiosa
- Soporte completo de Memcached
Otras soluciones de ORM están demasiado infladas o tienen limitaciones onerosas cuando se desarrolla algo remotamente complicado. Gacela resuelve las limitaciones del enfoque de registro activo mediante la implementación del patrón del asignador de datos, manteniendo al mínimo la expansión al usar PDO para todas las interacciones con la base de datos y Memcached.
Yo trabajo en miniOrm. Solo un mini ORM, para usar Object Model & MySQL Abstraction Layer de la manera más simple posible. Espero que te pueda ayudar: http://jelnivo.fr/miniOrm/
Agile Toolkit tiene su propia implementación única de ORM / ActiveRecord y SQL dinámico .
Introducción: http://agiletoolkit.org/intro/1
Sintaxis (Registro Activo):
$emp=$this->add(''Model_Employee'');
$emp[''name'']=''John'';
$emp[''salary'']=500;
$emp->save();
Sintaxis (SQL dinámico):
$result = $emp->count()->where(''salary'',''>'',400)->getOne();
Si bien Dynamic SQL y Active Record / ORM se pueden utilizar directamente, Agile Toolkit los integra aún más con la interfaz de usuario y la interfaz de usuario jQuery . Esto es similar a JSF pero escrito en PHP puro.
$this->add(''CRUD'')->setModel(''Employee'');
Esto mostrará CRUD AJAXified con para modelo de empleado.
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";
}