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

282

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

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

Теги:
database
orm

36 ответов

107

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

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

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

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

  • 0
    2-я ссылка ничего не показывает.
98

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

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

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

  • 8
    redbean - лучший слой абстракции базы данных, с которым я когда-либо работал. не "один из лучших" - лучший.
  • 0
    Очень хорошая находка. Я очень впечатлен этим ОРМ, чтобы не сказать больше
Показать ещё 7 комментариев
43

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

  • 0
    Propel также хорошо работает с Symfony, включая Symfony2.
  • 0
    Propel довольно хорош по стандартам php. Он генерирует довольно чистый код, совместимый с IDE, с геттерами и сеттерами и очень чистой системой абстракций Criteria для запросов.
34

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.

  • 13
    Меня всегда беспокоит, когда я вижу что-то вроде $product->load('product_id=123') в примере.
  • 8
    для параноиков альтернативный синтаксис: $product->load(array('product_id=:id',array(':id'=>123)));
Показать ещё 1 комментарий
29

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

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

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

  • 1
    Сегодня я искал легкую реализацию PHP ORM и нашел Pork.dbObject благодаря этому посту. Работает отлично! +1
  • 5
    Duude! Это довольно интересно. Я вижу, что последнее обновление произошло где-то в 09 году. Это все еще поддерживается? Если нет ... Я просто мог бы оживить это :)
23

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

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

  • 0
    Единственная проблема, которую я могу придумать с Doctrine2, заключается в том, что он зависит от PHP 5.3 и выше.
  • 8
    @jblue: Это не проблема, это особенность ;-). Большие библиотеки, такие как Doctrine, нуждаются в пространствах имен.
Показать ещё 1 комментарий
12

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

  • 0
    Я также согласен с тем, что Kohana - это фреймворк, наиболее похожий на RoR в мире PHP. Все, что ему не хватает, это строительные леса, а с поддержкой CLI в KO3 это просто вопрос того, как кто-то закатывает рукава и делает это.
12

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

  • 3
    Я попробовал это. Пришлось указывать одни и те же свойства объекта в 3 местах - конфиг, модель и схема базы данных. Это большая работа по внедрению ORM IMO.
  • 0
    Розетка очень тяжелая.
Показать ещё 1 комментарий
11

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

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

  • 0
    Propel также может «перепроектировать» существующую схему базы данных - создавая объекты PHP из чтения схемы базы данных.
8

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

6

Вы должны проверить Idiorm и Paris.

6

Сделайте снимок 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);
  • 2
    ссылка не работает?
4

Попробовал ORM библиотеки Flourish.

  • 0
    Да, я работал с этим в течение некоторого времени. Flourishlib великолепен, но ORM еще есть над чем поработать. Работа с таблицами соединений, которые имеют дополнительные свойства или внешние ключи, создание новых объектов может быть немного утомительным. Работать с простыми моделями очень просто. Взгляните на Repose ORM или Outlet для альтернативного ORM для PHP.
4

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

3

Посмотрите 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-операторов.

3

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

3

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

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

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

  • 2
    adodb больше подходит для Thin Model / Fat Controller, что, как правило, не очень хорошая вещь.
  • 3
    ADOdb - это DAL, а не ORM
Показать ещё 1 комментарий
3

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

3

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

  • 0
    Итак, как PHP 5.3 поможет кому-то написать лучшую ORM? Я не вижу никакой причины.
  • 8
    основной причиной является введение поздней статической привязки (ключевое слово «static»). читать об этом на blog.felho.hu/…
Показать ещё 3 комментария
2

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

2

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

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

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

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.

2

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

2

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

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

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

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

2

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

$urun = new Product();
$urun->name='CPU'
$urun->prince='124';
$urun->save();
  • 0
    1. Сайт турецкий; 2. Ваш код ничем не отличается от кода, который вы использовали бы, например, с Doctrine.
2

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

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

1

Sado - простой PHP ORM-пакет, простой в использовании и предлагает видеоуроки

1

Еще один отличный PHP ORM с открытым исходным кодом, который мы используем, - PHPSmartDb. Он стабилен и делает ваш код более безопасным и чистым. Функциональность базы данных внутри нее - это самый простой способ, с которым я когда-либо работал с PHP 5.3.

1

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

1

Посмотрел Syrius ORM. Это новый ORM, проект был на стадии разработки, но в следующем роде он будет выпущен в версии 1.0.

1

Действительно хорошая простая ORM MyActiveRecord. Документация MyActiveRecord. Я много использовал и могу сказать, что это очень просто и хорошо протестировано.

1

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

1

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

  • 0
    это похоже на то, как работает YII
1

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

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

1

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

  • 3
    Неверная информация

Ещё вопросы

Сообщество Overcoder
Наверх
Меню