Есть ли хорошая библиотека объектно-реляционного сопоставления для PHP?
Я знаю PDO / ADO, но они, похоже, обеспечивают абстрагирование различий между поставщиками баз данных, а не фактическое сопоставление между моделью домена и реляционной моделью. Я ищу библиотеку PHP, которая работает аналогично тому, как Hibernate делает для Java и NHibernate для .NET.
Посмотрите на Доктрину .
Doctrine 1.2 реализует Active Record. Доктрина 2+ – это ORM DataMapper.
Кроме того, проверьте 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). Fat-Free – всего 55 КБ.
Я сам разрабатывал Pork.dbObject. (Простая реализация PHP ORM и Active Record). Основная причина заключается в том, что я нахожу большинство ORM слишком тяжелыми.
Основная мысль Pork.dbObejct – быть легкой и простой в настройке. Нет кучи XML-файлов, всего один вызов функции в конструкторе для его привязки и addRelation или addCustomRelation для определения отношения к другому объекту dbObject.
Посмотрите: Pork.dbObject
Попробуйте Doctrine2 . Это, вероятно, самый мощный инструмент ORM для PHP. Я упоминаю об этом отдельно от Доктрины 1, потому что это совершенно другая часть программного обеспечения. Он был переписан с нуля, все еще находится в стадии бета-тестирования, но теперь он может использоваться и развиваться.
Это очень сложный ORM, но хорошо разработан. Лот магии из оригинальной Доктрины 1 исчез. Он предоставляет полное решение, и вы можете написать свой собственный ORM поверх Doctrine2 или использовать только один из его слоев .
Проверьте Outlet ORM . Это проще, чем Propel и Doctrine, и он похож на Hibernate, только с большим количеством PHP.
Я только начал с Kohana , и он кажется самым близким к Ruby on Rails, не прибегая ко всей сложности нескольких конфигурационных файлов, таких как Propel .
Мне очень нравится Propel , здесь вы можете получить обзор, документация очень хорошая, и вы можете получить ее через 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);
Вы должны проверить Идиорм и Париж .
В настоящее время я работаю над phpDataMapper , который является ORM, разработанным для простого синтаксиса, такого как проект Datamapper Ruby. Он все еще находится в раннем развитии, но он отлично работает.
Пробовал ORM библиотеки Flourish .
Пока выпуск PHP 5.3 не ожидает наличия хорошей ORM. Это ограничение OO для PHP.
У меня были большие впечатления от Idiorm и Paris . Idiorm – небольшая простая библиотека ORM. Париж – это не менее простая реализация Active Record, построенная на Idiorm. Это для PHP 5.2+ с PDO. Это идеально, если вам нужно что-то простое, что вы можете просто зайти в существующее приложение.
Мой друг Киен и я улучшили более раннюю версию ORM, которую он написал до PHP 5.3. Мы существенно портировали Ruby на 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-операторов.
Вы можете проверить « Удержание», если вы чувствуете себя авантюрно. Как и Outlet , он моделируется после Hibernate .
Это еще очень рано в разработке, но пока единственными ограничениями для модели домена являются то, что классы не отмечены как final, а свойства не отмечены частными. Как только я попаду в землю PHP> = 5.3, я попытаюсь реализовать поддержку и для частных объектов.
Если вы ищете ORM, который специфически реализует парадигму Data Mapper, а не Active Record, то я настоятельно рекомендую вам взглянуть на GacelaPHP .
Особенности Gacela:
Другие решения ORM слишком раздуты или имеют обременительные ограничения при разработке чего-либо удаленно сложного. Gacela устраняет ограничения активного подхода к записи, реализуя шаблон Data Mapper, сохраняя при этом минимальный взлет, используя PDO для всех взаимодействий с базой данных и Memcached.
MicroMVC имеет 13 КБ ORM, который использует только класс базы данных 8 КБ. Он также возвращает все результаты как объекты ORM и использует позднюю статическую привязку, чтобы избежать встраивания информации о таблице текущего объекта и метаданных в каждый объект. Это приводит к самым дешевым ресурсам ORM.
Он работает с MySQL , PostgreSQL и SQLite .
Бразильский ОРМ: http://www.hufersil.com.br/lumine . Он работает с PHP 5.2+. На мой взгляд, это лучший выбор для португальского и бразильского людей, потому что у него есть легкая для понимания документация и множество примеров для скачивания.
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();
Хотя динамический SQL и Active Record / ORM можно использовать напрямую, Agile Toolkit дополнительно интегрирует их с пользовательским интерфейсом и пользовательским интерфейсом jQuery . Это похоже на JSF, но написанное на чистом PHP.
$this->add('CRUD')->setModel('Employee');
Это отобразит AJAXified CRUD для модели Employee.
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"; }
Я работаю на miniOrm. Просто мини-ORM, чтобы как можно проще использовать Object Model & MySQL Abstraction Layer. Надеюсь, это может вам помочь: http://jelnivo.fr/miniOrm/
PHP ORM Faces для расширения PDO. См. PHP Faces Framework .
$urun = new Product(); $urun->name='CPU' $urun->prince='124'; $urun->save();
Посмотрите http://code.google.com/p/lworm/ . Это действительно простая, но мощная, легкая система ORM для PHP. Вы также можете легко расширить его, если хотите.
Еще один отличный PHP ORM с открытым исходным кодом, который мы используем, – PHPSmartDb . Он стабилен и делает ваш код более безопасным и чистым. Функциональность базы данных внутри нее – это самый простой способ, с которым я когда-либо работал с PHP 5.3.
Доктрина, вероятно, лучше всего. До Doctrine DB_DataObject был по существу единственной другой утилитой, которая была открыта.