Вопрос по database, php – Хорошая PHP ORM библиотека?

269

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

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

Ваш Ответ

29   ответов
2

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

8

Я нашел связанные с ORM классы в библиотеке PHPПроцветать.

2

PHP ORM Faces Для расширения PDO. УвидетьPHP Faces Framework.

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

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

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

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

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

Я попробовал это. Пришлось указывать одинаковые свойства объекта в 3 местах - конфиг, модель и схема базы данных. Это большая работа по внедрению ORM IMO.
Я пробовал это (1.0 RC1), и оно было очень глючным даже в основной функциональности. И да, есть много конфигурации для записи. Я не рекомендую это.
Розетка очень тяжелая.
6

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

28

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

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

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

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

Axon ORM является частьюОбезжиренный каркас - это показывает картограф на лету. Нет генераторов кода. Нет глупого XML /YAML конфигурационные файлы. Он читает схему базы данных непосредственно из бэкэнда, поэтому в большинствеCRUD операции, которые вам даже не нужно расширять базовую модель. Работает со всеми основнымиPDOподдерживаемые движки баз данных:MySQL, SQLite, SQL & # xA0; сервер/ 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 & # xA0; KB (Axon) + 6 & # xA0; KB (SQLdb). Обезжиренный - всего 55 КБ.

Fat-Free также имеет NoSQL ORM для MongoDB и плоских файлов
для параноиков альтернативный синтаксис$product->load(array('product_id=:id',array(':id'=>123)));
Меня всегда беспокоит, когда я вижу что-то вроде$product->load('product_id=123') в примере.
1

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

98

ПытатьсяКрасный боб, его требует:

  • No configuration
  • No database (it creates everything on the fly)
  • No models
  • etc.

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

+1 +1 +1 +! +! !!!! ... Иисус, я прочитал первую часть документации, и это заставило меня сделать зловещий смех диктатора, и я уже загружаю это!
redbean - лучший уровень абстракции базы данных, с которым я когда-либо работал. не "один из лучших" - лучшее.
Очень хорошая находка. Я очень впечатлен этим ORM по меньшей мере
Сравните RedBean с Доктриной:stackoverflow.com/questions/8063640/redbean-vs-doctrine
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";
}
1

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

3

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

2

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

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

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

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

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

Это будет отображать AJAXifiedCRUD с для сотрудника модели.

3

Посмотрите наLEAP ORM для Кохана, Работает с кучей баз данных, включаяDB2, изморось, жар-птица, MariaDBSQL & # xA0; Сервер,MySQLOracle,PostgreSQL, а такжеSQLite, С помощью простой функции автозагрузки он может работать практически с любым фреймворком PHP. Исходный код включенGitHub вhttps://github.com/spadefoot/kohana-orm-leap, Вы можете оформить заказУчебные пособия LEAP онлайн.

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

22

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

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

@jblue: это не проблема, это особенность ;-). Большие библиотеки, такие как Doctrine, нуждаются в пространствах имен.
& # x201C; Много магии из оригинальной Доктрины 1 исчезло. & # x201D; & # X2014; В каком отношении это положительно?
Единственная проблема, которую я могу придумать с Doctrine2, заключается в том, что он зависит от PHP 5.3 и выше.
2

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

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

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

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

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

adodb больше подходит для Thin Model / Fat Controller, что, как правило, не очень хорошая вещь.
ADOdb - это DAL, а не ORM
ADOdb имеет ORM (но не просто ORM). Как правило, это действительно отличное решение, оно работает намного лучше, чем Zend для БД (и, будучи более медленным, чем ADOdb, Zend DB имеет только ограниченную поддержку JOIN), оно поддерживает автоматическое экранирование с параметризацией (в отличие от, скажем, Doctrine) многих различных бэкэндов БД и имеет хороший расширяемый дизайн кэширования с очень простой интеграцией с memcache. Я не думаю, что совершенно точно можно сказать, что он подходит для «тонкой модели / жирового контроллера»; реализация (вы можете сделать это или нет, но дизайн ADOdb не поддерживает тот или иной путь).
112

Смотреть вдоктрина.

Доктрина 1.2 реализует Active Record.Учение 2+ является DataMapper ORM

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

Кроме того, взгляните наDataMapper против активной записи.

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

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

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

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

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

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

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

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

Работает сMySQL, PostgreSQL, а такжеSQLite.

2

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

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

  • Data mapper
  • Foreign key mapping
  • Association mapping
  • Dependent mapping
  • Concrete table inheritance
  • Query object
  • Metadata mapping
  • Lazy & eager loading
  • Full Memcached support

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

4

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

45

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

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

Похожие вопросы