Ответ 1
Оба CodeIgniter (http://codeigniter.com/user_guide/database/active_record.html) и его PHP5 только fork Kohana (http://docs.kohanaphp.com/libraries/orm) содержат реализации шаблона ActiveRecord.
Я ищу запись Ruby Active для PHP. Что-то настолько простое, что я просто определяю свои поля, расширяю базовый класс ORM, и я получаю операции ACID бесплатно. Я должен получать утилизаторы и сеттеры по умолчанию без написания кода, но переопределение по умолчанию getter или setter так же просто, как объявление get $fieldName или установка функций $fieldName с поведением, которое я хочу. Symphony позволяет создавать около 5 файлов на объект, и все определенные объекты всегда загружаются, насколько я могу судить. Что является лучшей альтернативой? Почему это лучше? Можете ли вы привести простые примеры в свои ответы?
Доктрина - это еще один ORM, на который я смотрел, помимо симфонии. Также вам нужно создать файлы yaml, которые описывают ваши структуры данных. База данных уже определяет этот материал. Что будет просто читать мои таблицы defs без необходимости генерировать и хранить файлы конфигурации везде?
Оба CodeIgniter (http://codeigniter.com/user_guide/database/active_record.html) и его PHP5 только fork Kohana (http://docs.kohanaphp.com/libraries/orm) содержат реализации шаблона ActiveRecord.
Я большой поклонник Doctrine, который является полнофункциональным ORM, который будет заменять Propel на ORM по умолчанию Symfony.
Он получил ваш основной материал ORM, который вы ожидаете, и полнофункциональный построитель запросов, который, как мне показалось, замечательный.
Он поставляется с полным набором инструментов командной строки для управления вашими базами данных. Например, вы можете создавать свои схемы и светильники в YAML, иметь Doctrine, создавать классы на основе вашей схемы, создавать базу данных, создавать схему на основе моделей, а затем заполнять базу данных вашими светильниками всего одним ./doctrine build-all-reload
.
Он также включает поддержку миграции базы данных и недавно обновил миграции для автоматического разграничения и создания ваших моделей миграции.
В соответствии с жалобами вашей доктрины вы можете запустить команду ./doctrine generate-models-db
или ./doctrine generate-yaml-db
для автоматического создания моделей и файлов yaml соответственно из текущей настройки базы данных.
Другие тонкости включают " Behaviors, что значительно облегчает жизнь при реализации определенных, ну, поведения в вашей схеме. Например, вы можете добавить поведение" Timestampable "в ваш файл класса. Doctine автоматически добавляет столбец" created_at "и" updated_at ", заполняет их, и каждый запускаемый $object->save()
автоматически обновляет столбец" updated_at". Более сложное поведение включает i18n, управление версиями таблиц и деревья (хотя на самом деле только NestedSet).
Лично я был очень влюблен в Доктрину и бредил об этом каждый шанс, который я получаю.
Я использую малоизвестный слой orm, называемый redbean. вы можете найти его здесь: http://www.redbeanphp.com. его абсолютно уникальный в том смысле, что он просто создает таблицы столбцов и индексов самостоятельно без каких-либо файлов конфигурации. Я считаю, что это огромная временная пауза!
Я создал свой собственный, без раздувания. (Хотя мне нужно обновить источники на сайте)
Я создал его именно с учетом указанных вами соображений: никаких десятков xml файлов, огромных фреймворков, просто простых конструкторов с базой данных для свойств mappigns, и это ваш основной материал CRUD/Find/Join. Для большинства вещей, которые я делаю, мне даже не нужно писать пользовательские запросы.
Я написал все это ранее на основные примеры, чтобы получить представление об этом.
Следующая версия, которую я выпущу, включает в себя однострочное соединение для присоединения к соединению (для перехода по "пути" через вашу базу данных), настройкам базы данных ini, поддержке кросс-базы данных, супер-простой абстракции базы данных и стандарту loglog, который возвращается к SQLite, если ваша база данных не работает.
Просто дайте крик, если вы заинтересованы в обновлениях, тогда я буду спешить.
О да, и не забывайте, есть и красивый визуальный генератор эшафотов, называемый Pork.Generator. Он пытается проанализировать структуру вашей базы данных и найти 1:1 1: многие и многие: многие отношения и могут автоматически генерировать классы для вас:-) отношения найдены в базе данных http://www.schizofreend.nl/images/demo3.jpg
Zend_Db_Table и Zend_Db_Table_Row довольно хороши в что вы описываете. Вам не нужен какой-либо файл конфигурации, большинство метаданных "обнаружено" из самой базы данных.
Технически эти классы не реализуют шаблон ActiveRecord. Вместо этого они реализуют Table Data Gateway и Row Data Gateway шаблоны. Вместе они имеют аналогичную ценность, как ActiveRecord, и в некотором смысле более гибкие, чем ActiveRecord.
Но как и в случае с любым ORM, неизбежно возникают некоторые SQL-запросы и операции, которые невозможно выполнить через интерфейс OO. ORM не может служить универсальным магазином.
Сноска: я работал над проектом Zend Framework чуть больше года, особенно на компоненте Zend_Db. Но я больше не работаю для них.
Проверьте поддерживаемую структуру. Хотя я предпочитаю генерировать код по сравнению с ActiveRecord (отражение во время выполнения), я нашел удобную в использовании среду поддержки, особенно с точки зрения возможностей ORM.
http://framework.maintainable.com/mvc/3_model.php#c3.7
Если вам нужна структура, основанная на генерации кода, попробуйте QCodo. Что бы вы ни говорили о доктрине, я могу сказать для Qcodo. Это полноценная платформа, имитирующая .NET/Delphi. Однако вы можете просто создать функцию генерации кода и найти способы отделить ваш сгенерированный класс от остальной части фреймворка. Таким образом, вы можете вставлять сгенерированные классы в другие рамки.
Другой вариант, следующий за реализацией Ruby DataMapper, - phpDataMapper. Это, очевидно, Data Mapper вместо ActiveRecord:).
Я бы рекомендовал Учение с Symfony. Несмотря на то, что вам нужно узнать больше, вы обнаружите, что у вас есть функции, которые вам понадобятся после того, как проект будет расти (CRUD, Form framework, Record Templates, DQL, Plugin support, Behaviors). Оба проекта имеют очень активное сообщество, и вы не должны заходить в тупик, потому что большинство ваших вопросов уже были услышаны в официальных учебниках или на форуме.
Если вам не нравятся определения базы данных в YAML, вы всегда можете использовать ORM Designer или MySQL Workbench.
Я рекомендую QCubed. Это невероятно мощная инфраструктура ORM, основанная на PHP5, которая фокусируется на создании кода, разработке пользовательских интерфейсов и быстрой разработке приложений. Взгляните на обучающие видеоролики: http://qcu.be/content/video-screencasts
Доводы
против
Мне нравится Idiorm и Paris и использовать их как в крошечных проектах. Idiorm - это реальный ORM, тогда как Париж является активной реализацией записи. Вы можете использовать любой из них, который вы бы предпочли.
Существует также вилка, называемая Granada, которая построена над Idiorm и Paris, и добавляет поддержку, такую как загружаемая загрузка и т.д.
Реляционный сопоставитель объектов (ORM) для PHP, который находится поверх мощного уровня абстракции базы данных (DBAL). Одной из его ключевых особенностей является возможность записи запросов к базе данных в проприетарном объектно-ориентированном диалекте SQL под названием Doctrine Query Language (DQL), вдохновленном Hibernates HQL. Это дает разработчикам мощную альтернативу SQL, которая поддерживает гибкость, не требуя ненужного дублирования кода.