Хорошая PHP ORM библиотека?

Есть ли хорошая библиотека объектно-реляционного отображения для PHP?

Я знаю о PDO/ ADO, но, похоже, они обеспечивают только абстракцию различий между поставщиками баз данных, а не фактическое отображение между моделью предметной области и реляционной моделью. Я ищу библиотеку PHP, которая работает так же, как Hibernate для Java, а NHibernate для.NET.

36 ответов

Посмотри в Учение.

Доктрина 1.2 реализует Active Record. Doctrine 2+ - это DataMapper ORM.

Кроме того, проверьте Xyster. Он основан на шаблоне Data Mapper.

Кроме того, взгляните на DataMapper против Active Record.

Попробуйте RedBean, он требует:

  • Нет конфигурации
  • Нет базы данных (она создает все на лету)
  • Нет моделей
  • и т.п.

Он даже делает все блокировки и транзакции для вас и отслеживает производительность в фоновом режиме. (Черт! Он даже делает сборку мусора....) Лучше всего... вам не нужно писать ни одной... строки кода... Иисус, слой ORM, спас мне задницу!

Есть только два хороших: доктрина и пропел. Мы одобряем Доктрину, и она хорошо работает с Symfony. Однако, если вы ищете поддержку баз данных, кроме основных, вам придется написать свой собственный код.

Axon ORM является частью Fat-Free Framework - он имеет картограф на лету. Нет генераторов кода. Нет глупых файлов конфигурации XML / YAML. Он считывает схему базы данных непосредственно из бэкэнда, поэтому в большинстве операций CRUD вам даже не нужно расширять базовую модель. Он работает со всеми основными механизмами баз данных, поддерживаемыми PDO: MySQL, SQLite, SQL Server/ Sybase, Oracle, PostgreSQL и т. Д.

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

Более того, плагин и сопровождающий уровень доступа к данным SQL так же легки, как и фреймворк: 14 КБ (Axon) + 6 КБ (SQLdb). Без жира всего 55 КБ.

Я разрабатывал Pork.dbObject самостоятельно. (Простая реализация PHP ORM и Active Record). Основная причина в том, что большинство ORM мне кажутся слишком тяжелыми.

Основная идея Pork.dbObejct - быть легким и простым в настройке. Нет связки файлов XML, только один вызов функции в конструкторе, чтобы связать его, и addRelation или addCustomRelation, чтобы определить отношение к другому dbObject.

Дайте ему посмотреть: Pork.dbObject

Попробуйте Doctrine2. Это, вероятно, самый мощный инструмент ORM для PHP. Я упоминаю об этом отдельно от Doctrine 1, потому что это совершенно другое программное обеспечение. Он был переписан с нуля, все еще находится в стадии бета-тестирования, но теперь он пригоден для использования и разработан.

Это очень сложный ORM, но хорошо продуманный. Много магии из оригинальной Доктрины 1 исчезло. Он предоставляет полное решение, и вы можете написать свой собственный ORM поверх Doctrine2 или использовать только один из его слоев.

Я только начал с Kohana, и он кажется наиболее близким к Ruby on Rails, не задействуя всю сложность нескольких конфигурационных файлов, как с Propel.

Мне действительно нравится Propel, здесь вы можете получить обзор, документация довольно хорошая, и вы можете получить его через PEAR или SVN.

Вам нужна только работающая установка PHP5 и Phing, чтобы начать создавать классы.

Проверьте аутлет ORM. Он проще, чем Propel и Doctrine, и работает аналогично Hibernate, только с большей чувствительностью к PHP.

Я нашел связанные с ORM классы в библиотеке PHP Flourish.

Вы должны проверить Идиорм и Париж.

Попробуйте DORM, объектно-реляционный картограф для PHP 5. Он поддерживает все виды отношений (1-к-1), (1-ко-многим), (многие-ко-многим) и типы данных. Это абсолютно ненавязчиво: не требуется генерация кода или расширение класса. На мой взгляд, он превосходит любой ORM, включая Doctrine и Propel. Тем не менее, он все еще находится в бета-версии и может значительно измениться в ближайшие пару месяцев. http://www.getdorm.com/

У этого также есть очень маленькая кривая изучения. Три основных метода, которые вы будете использовать:

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

У меня был большой опыт с Идиормом и Парижем. Idiorm - это небольшая простая библиотека ORM. Paris - не менее простая реализация Active Record, построенная на Idiorm. Это для PHP 5.2+ с PDO. Это прекрасно, если вы хотите что-то простое, что вы можете просто вставить в существующее приложение.

В настоящее время я работаю над phpDataMapper, который представляет собой ORM, разработанный для простого синтаксиса, подобный проекту Datamapper в Ruby. Он все еще находится на ранней стадии разработки, но отлично работает.

Посмотрите на LEAP ORM для Кохана. Он работает со множеством баз данных, включая DB2, Drizzle, Firebird, MariaDB, SQL Server, MySQL, Oracle, PostgreSQL и SQLite. С помощью простой функции автозагрузки он может работать практически с любой платформой PHP. Исходный код находится на GitHub по адресу https://github.com/spadefoot/kohana-orm-leap. Вы можете проверить учебники LEAP онлайн.

Библиотека ORM работает с нецелыми первичными ключами и составными ключами. Соединения управляются через пул соединений с базой данных, и он работает с необработанными SQL-запросами. В ORM даже есть построитель запросов, который делает построение операторов SQL очень простым.

До выхода PHP 5.3 не ожидайте хорошего ORM. Это ОО ограничение PHP.

Попробуйте PHP ADOdb.

Я не могу сказать, что это лучшее, потому что я не использовал другие. Но это быстро, он поддерживает Memcached и кеширование.

И это намного быстрее, чем в Zend Framework DB/Select.

Мой друг Кин и я улучшили более раннюю версию ORM, которую он написал до PHP 5.3. По сути, мы перенесли активную запись Ruby on Rails на PHP. Ему по-прежнему не хватает некоторых ключевых функций, которые нам нужны, таких как транзакции, поддержка составного первичного ключа, еще несколько адаптеров (сейчас работают только MySQL и SQLite 3). Но мы очень близки к тому, чтобы закончить эту работу. Вы можете взглянуть на PHP ActiveRecord с PHP 5.3.

Бразильский ORM: http://www.hufersil.com.br/lumine. Работает с PHP 5.2+. На мой взгляд, это лучший выбор для португальцев и бразильцев, потому что он имеет простую для понимания документацию и множество примеров для скачивания.

Вы можете проверить Repose, если вы чувствуете себя предприимчивым. Как и Outlet, он смоделирован после Hibernate.

Он все еще находится на очень ранней стадии разработки, но пока единственными ограничениями в модели предметной области являются то, что классы не помечены как окончательные, а свойства не помечены как частные. Как только я доберусь до PHP >= 5.3, я попытаюсь реализовать поддержку и для частных свойств.

PHP ORM Faces Для расширения PDO. Смотрите PHP Faces Framework.

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

MicroMVC имеет 13 КБ ORM, который опирается только на класс базы данных8 КБ. Он также возвращает все результаты как сами объекты ORM и использует позднюю статическую привязку, чтобы избежать встраивания информации о таблице текущего объекта и метаданных в каждый объект. Это приводит к самым низким накладным расходам ORM.

Он работает с MySQL, PostgreSQL и SQLite.

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";
}

Если вы ищете ORM, который реализует парадигму Data Mapper, а не конкретно Active Record, то я настоятельно рекомендую вам взглянуть на GacelaPHP.

Особенности Gacela:

  • Картограф данных
  • Отображение внешнего ключа
  • Сопоставление ассоциаций
  • Зависимое отображение
  • Наследование бетонных столов
  • Объект запроса
  • Отображение метаданных
  • Ленивая и энергичная загрузка
  • Полная поддержка Memcached

Другие решения ORM слишком раздуты или имеют обременительные ограничения при разработке чего-либо, что может быть слишком сложным. Gacela разрешает ограничения подхода активной записи, внедряя шаблон отображения данных, сохраняя при этом раздутость до минимума, используя PDO для всех взаимодействий с базой данных и Memcached.

Agile Toolkit имеет собственную уникальную реализацию ORM/ActiveRecord и динамический SQL.

Введение: http://agiletoolkit.org/intro/1

Синтаксис (активная запись):

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

Синтаксис (динамический SQL):

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

Хотя Dynamic SQL и Active Record/ORM можно использовать напрямую, Agile Toolkit дополнительно интегрирует их с пользовательским интерфейсом и пользовательским интерфейсом jQuery. Это похоже на JSF, но написано на чистом PHP.

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

Это отобразит AJAXified CRUD для модели Employee.

Я работаю на miniOrm. Просто мини-ORM для максимально простого использования Object Model & MySQL Abstraction Layer. Надеюсь, что это поможет вам: http://jelnivo.fr/miniOrm/

Попробуйте PdoMap. Википедия утверждает, что вдохновлен Hibernate. Поскольку я никогда не использовал Hibernate, я не могу судить:), но я бы сказал по своему опыту, что это хороший и быстрый ORM, который легко внедрить, с менее крутой кривой обучения, чем другие ORM.

Если вы ищете ORM, например, Hibernate, вам стоит взглянуть на PMO.

Он может быть легко интегрирован в архитектуру SOA (есть только класс веб-сервиса для разработки).

Посмотрите на http://code.google.com/p/lworm/. Это действительно простая, но мощная и легкая система ORM для PHP. Вы также можете легко расширить его, если хотите.

Другие вопросы по тегам