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

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

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

Ответы

Ответ 1

Посмотрите Doctrine.

Doctrine 1.2 реализует активную запись. Doctrine 2+ является ORM DataMapper.

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

Кроме того, посмотрите DataMapper и Active Record.

Ответ 2

Попробуйте RedBean, для этого требуется:

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

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

Ответ 3

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

Ответ 4

Axon ORM является частью Fat-Free Framework - в нем есть встроенный калькулятор. Нет генераторов кода. Нет глупых файлов конфигурации XML/YAML. Он считывает схему базы данных непосредственно из бэкэнд, поэтому в большинстве операций PDO -поддержанными механизмами базы данных: MySQL, SQLite, SQL Сервер/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 a new record

// Retrieve
$product->load('product_id=123');
echo $product->description;

// Update
$product->description='A better sofa bed';
$product->save(); // ORM knows it an existing record

// Delete
$product->erase();

Более всего, подключаемый модуль и сопутствующий уровень доступа к данным SQL так же легки, как и каркас: 14 KB (Axon) + 6 KB (SQLdb). Fat-Free - это всего лишь 55 KB.

Ответ 5

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

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

Посмотрите: Pork.dbObject

Ответ 6

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

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

Ответ 7

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

Ответ 8

Отъезд Выходной ORM. Это проще, чем Propel и Doctrine, и он похож на Hibernate, только с большим количеством PHP-навыков.

Ответ 9

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

Вам нужна только рабочая установка PHP5 и Phing, чтобы начать генерировать классы.

Ответ 10

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

Ответ 11

Сделайте снимок 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);

Ответ 13

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

Ответ 15

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

Ответ 16

Пока выпуск PHP 5.3 не ожидает наличия хорошей ORM. Это ограничение OO для PHP.

Ответ 17

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

Ответ 18

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

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

И он waaaay быстрее, чем DB/Select Zend Framework.

Ответ 19

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

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

Ответ 20

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

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

Ответ 21

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

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

Ответ 22

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

Возможности Gacela:

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

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

Ответ 23

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

Ответ 24

Agile Toolkit имеет свою собственную уникальную реализацию ORM/ActiveRecord и dynamic 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 UI. Это похоже на JSF, но написано на чистом PHP.

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

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

Ответ 25

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

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

Ответ 26

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

Ответ 27

Доктрина, вероятно, лучше всего. До доктрины DB_DataObject по существу была единственной другой полезной операцией, которая была открыта.

Ответ 28

Если вы ищете ORM, например Hibernate, вы должны посмотреть PMO.

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

Ответ 29

Там есть фантастическая ORM, включенная в QCubed framework; он основан на генерации кода и строительных лесов. В отличие от ActiveRecord, основанного на отражении, и, как правило, медленного, генерация кода делает скелетные классы для вас на основе базы данных и позволяет вам впоследствии их настраивать. Отлично работает.

Ответ 30

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