Ответ 1
Посмотрите Doctrine.
Doctrine 1.2 реализует активную запись. Doctrine 2+ является ORM DataMapper.
Кроме того, проверьте Xyster. Он основан на шаблоне Data Mapper.
Кроме того, посмотрите DataMapper и Active Record.
Есть ли хорошая библиотека объектно-реляционного сопоставления для PHP?
Я знаю PDO/ADO, но они, похоже, предоставляют только абстрагирование различий между поставщиками баз данных, а не фактическое сопоставление между доменом модель и реляционная модель. Я ищу библиотеку PHP, которая работает аналогично тому, как Hibernate делает для Java и NHibernate для .NET.
Посмотрите Doctrine.
Doctrine 1.2 реализует активную запись. Doctrine 2+ является ORM DataMapper.
Кроме того, проверьте Xyster. Он основан на шаблоне Data Mapper.
Кроме того, посмотрите DataMapper и Active Record.
Попробуйте RedBean, для этого требуется:
Он делает все блокировки и транзакции для вас и контролирует производительность в фоновом режиме. (Хек! Он даже делает сборку мусора....) Лучше всего... вам не нужно писать ни одну... строку кода... Иисус this, слой ORM, спас меня!
Есть только два хороших: Doctrine и Propel. Мы пользуемся доктриной, и она хорошо работает с Symfony. Однако, если вы ищете поддержку базы данных, помимо основных, вам придется написать свой собственный код.
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.
Я сам разрабатываю Pork.dbObject. (Простая реализация PHP ORM и Active Record) Основная причина в том, что я нахожу большинство ORM слишком тяжелыми.
Основная мысль Pork.dbObejct - быть легкой и простой в настройке. Нет связки XML файлов, только один вызов функции в конструкторе для его привязки и addRelation или addCustomRelation для определения отношения к другому dbObject.
Посмотрите: Pork.dbObject
Попробуйте Doctrine2. Это, вероятно, самый мощный инструмент ORM для PHP. Я упоминаю об этом отдельно от Доктрины 1, потому что это совершенно другая часть программного обеспечения. Он был переписан с нуля, все еще находится в бета-фазе, но теперь он используется и развивается.
Это очень сложный ORM, но хорошо продуманный. Лот магии из оригинальной Доктрины 1 исчез. Он предоставляет полное решение, и вы можете написать свой собственный ORM поверх Doctrine2 или использовать только один из слои.
Я только начал с Kohana, и он кажется самым близким к Ruby on Rails, не вызывая всю сложность нескольких файлов конфигурации, таких как Propel.
Отъезд Выходной ORM. Это проще, чем Propel и Doctrine, и он похож на Hibernate, только с большим количеством PHP-навыков.
Мне действительно нравится Propel, здесь вы может получить обзор, documentation довольно хорошо, и вы можете получить его через PEAR или SVN.
Вам нужна только рабочая установка PHP5 и Phing, чтобы начать генерировать классы.
Я нашел классы, связанные с 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 и Paris.
В настоящее время я работаю над phpDataMapper, который является ORM, разработанным для простого синтаксиса, такого как проект Ruby Datamapper. Он все еще находится в раннем развитии, но он отлично работает.
Попробовал ORM библиотеки Flourish.
У меня были большие впечатления от Idiorm и Paris. Idiorm - небольшая простая библиотека ORM. Париж - это не менее простая реализация Active Record, построенная на Idiorm. Это для PHP 5.2+ с PDO. Это идеально, если вам нужно что-то простое, что вы можете просто зайти в существующее приложение.
Пока выпуск PHP 5.3 не ожидает наличия хорошей ORM. Это ограничение OO для PHP.
Мой друг Киен и я улучшили более раннюю версию ORM, которую он написал до PHP 5.3. Мы существенно портировали Ruby on Rails Active Record на PHP. Нам по-прежнему не хватает некоторых ключевых функций, таких как транзакции, поддержка составных первичных ключей, еще несколько адаптеров (сейчас работают только MySQL и SQLite 3). Но мы очень близки к завершению этого. Вы можете посмотреть PHP ActiveRecord с PHP 5.3.
Попробуйте PHP ADOdb.
Я не могу сказать, что это лучше, потому что я не использовал других. Но он быстро, он поддерживает Memcached и кеширование.
И он waaaay быстрее, чем DB/Select Zend Framework.
Посмотрите 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-операторов.
Вы можете проверить Repose, если вы чувствуете себя авантюрно. Как Outlet, он моделируется после Hibernate.
Это еще очень рано в разработке, но пока единственными ограничениями для модели домена являются то, что классы не отмечены как final, а свойства не отмечены частными. Как только я попаду в землю PHP >= 5.3, я также попытаюсь реализовать поддержку частных свойств.
PHP ORM Faces для расширения PDO. См. PHP Faces Framework.
$urun = new Product();
$urun->name='CPU'
$urun->prince='124';
$urun->save();
Если вы ищете ORM, который специфически реализует парадигму Data Mapper, а не Active Record, то я настоятельно рекомендую вам взглянуть на GacelaPHP.
Возможности Gacela:
Другие решения ORM слишком раздуты или имеют обременительные ограничения при разработке чего-либо удаленно сложного. Gacela устраняет ограничения активного подхода к записи, реализуя шаблон Data Mapper, сохраняя при этом минимальный уровень раздувания, используя PDO для всех взаимодействий с базой данных и Memcached.
Бразильский ОРМ: http://www.hufersil.com.br/lumine. Он работает с PHP 5.2+. На мой взгляд, это лучший выбор для португальского и бразильского людей, потому что он имеет легкую для понимания документацию и множество примеров для скачивания.
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.
MicroMVC имеет 13 KB ORM, который полагается только на 8 KB класс базы данных. Он также возвращает все результаты как объекты ORM и использует позднюю статическую привязку, чтобы избежать встраивания информации о текущей таблице объектов и метаданных в каждый объект. Это приводит к самым дешевым ресурсам ORM.
Он работает с MySQL, PostgreSQL и SQLite.
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";
}
Доктрина, вероятно, лучше всего. До доктрины DB_DataObject по существу была единственной другой полезной операцией, которая была открыта.
Если вы ищете ORM, например Hibernate, вы должны посмотреть PMO.
Он может быть легко интегрирован в архитектуру SOA (есть только разработка webservice classe).
Там есть фантастическая ORM, включенная в QCubed framework; он основан на генерации кода и строительных лесов. В отличие от ActiveRecord, основанного на отражении, и, как правило, медленного, генерация кода делает скелетные классы для вас на основе базы данных и позволяет вам впоследствии их настраивать. Отлично работает.
Посмотрите http://code.google.com/p/lworm/. Это действительно простая, но мощная, легкая система ORM для PHP. Вы также можете легко расширить его, если хотите.