Подтвердить что ты не робот

Что самое легкое в использовании рамки ORM для PHP?

Я ищу запись Ruby Active для PHP. Что-то настолько простое, что я просто определяю свои поля, расширяю базовый класс ORM, и я получаю операции ACID бесплатно. Я должен получать утилизаторы и сеттеры по умолчанию без написания кода, но переопределение по умолчанию getter или setter так же просто, как объявление get $fieldName или установка функций $fieldName с поведением, которое я хочу. Symphony позволяет создавать около 5 файлов на объект, и все определенные объекты всегда загружаются, насколько я могу судить. Что является лучшей альтернативой? Почему это лучше? Можете ли вы привести простые примеры в свои ответы?

Доктрина - это еще один ORM, на который я смотрел, помимо симфонии. Также вам нужно создать файлы yaml, которые описывают ваши структуры данных. База данных уже определяет этот материал. Что будет просто читать мои таблицы defs без необходимости генерировать и хранить файлы конфигурации везде?

4b9b3361

Ответ 2

Я большой поклонник 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).

Лично я был очень влюблен в Доктрину и бредил об этом каждый шанс, который я получаю.

Ответ 3

Я использую малоизвестный слой orm, называемый redbean. вы можете найти его здесь: http://www.redbeanphp.com. его абсолютно уникальный в том смысле, что он просто создает таблицы столбцов и индексов самостоятельно без каких-либо файлов конфигурации. Я считаю, что это огромная временная пауза!

Ответ 4

Я создал свой собственный, без раздувания. (Хотя мне нужно обновить источники на сайте)

Я создал его именно с учетом указанных вами соображений: никаких десятков xml файлов, огромных фреймворков, просто простых конструкторов с базой данных для свойств mappigns, и это ваш основной материал CRUD/Find/Join. Для большинства вещей, которые я делаю, мне даже не нужно писать пользовательские запросы.

Я написал все это ранее на основные примеры, чтобы получить представление об этом.

Следующая версия, которую я выпущу, включает в себя однострочное соединение для присоединения к соединению (для перехода по "пути" через вашу базу данных), настройкам базы данных ini, поддержке кросс-базы данных, супер-простой абстракции базы данных и стандарту loglog, который возвращается к SQLite, если ваша база данных не работает.

Просто дайте крик, если вы заинтересованы в обновлениях, тогда я буду спешить.

О да, и не забывайте, есть и красивый визуальный генератор эшафотов, называемый Pork.Generator. Он пытается проанализировать структуру вашей базы данных и найти 1:1 1: многие и многие: многие отношения и могут автоматически генерировать классы для вас:-) отношения найдены в базе данных http://www.schizofreend.nl/images/demo3.jpg

Ответ 5

Zend_Db_Table и Zend_Db_Table_Row довольно хороши в что вы описываете. Вам не нужен какой-либо файл конфигурации, большинство метаданных "обнаружено" из самой базы данных.

Технически эти классы не реализуют шаблон ActiveRecord. Вместо этого они реализуют Table Data Gateway и Row Data Gateway шаблоны. Вместе они имеют аналогичную ценность, как ActiveRecord, и в некотором смысле более гибкие, чем ActiveRecord.

Но как и в случае с любым ORM, неизбежно возникают некоторые SQL-запросы и операции, которые невозможно выполнить через интерфейс OO. ORM не может служить универсальным магазином.

Сноска: я работал над проектом Zend Framework чуть больше года, особенно на компоненте Zend_Db. Но я больше не работаю для них.

Ответ 6

Проверьте поддерживаемую структуру. Хотя я предпочитаю генерировать код по сравнению с ActiveRecord (отражение во время выполнения), я нашел удобную в использовании среду поддержки, особенно с точки зрения возможностей ORM.

http://framework.maintainable.com/mvc/3_model.php#c3.7

Если вам нужна структура, основанная на генерации кода, попробуйте QCodo. Что бы вы ни говорили о доктрине, я могу сказать для Qcodo. Это полноценная платформа, имитирующая .NET/Delphi. Однако вы можете просто создать функцию генерации кода и найти способы отделить ваш сгенерированный класс от остальной части фреймворка. Таким образом, вы можете вставлять сгенерированные классы в другие рамки.

Ответ 7

Другой вариант, следующий за реализацией Ruby DataMapper, - phpDataMapper. Это, очевидно, Data Mapper вместо ActiveRecord:).

Ответ 8

Я бы рекомендовал Учение с Symfony. Несмотря на то, что вам нужно узнать больше, вы обнаружите, что у вас есть функции, которые вам понадобятся после того, как проект будет расти (CRUD, Form framework, Record Templates, DQL, Plugin support, Behaviors). Оба проекта имеют очень активное сообщество, и вы не должны заходить в тупик, потому что большинство ваших вопросов уже были услышаны в официальных учебниках или на форуме.

Если вам не нравятся определения базы данных в YAML, вы всегда можете использовать ORM Designer или MySQL Workbench.

Ответ 9

Я рекомендую QCubed. Это невероятно мощная инфраструктура ORM, основанная на PHP5, которая фокусируется на создании кода, разработке пользовательских интерфейсов и быстрой разработке приложений. Взгляните на обучающие видеоролики: http://qcu.be/content/video-screencasts

Ответ 10

http://dbphp.net

Доводы

  • Генерирует/изменяет базы данных/таблицы/поля/различные атрибуты таблицы/поля на лету.
  • Не требуется установка.
  • Не имеет конфигурации вообще.
  • Нужно только включить библиотеку и указать параметры ссылки db для начала работы.
  • Он имеет встроенную поддержку локализации.
  • Он имеет различные уровни кеша и позволяет расширять механизм кэширования.
  • Он работает со многими различными подключениями к базе данных одновременно.
  • Он может устанавливать отношения между таблицами, расположенными на других серверах баз данных.
  • Он извлекает атрибуты таблицы/поля, используя комментарии класса и переменных doc.

против

  • Он работает только с объектами. то есть вы должны иметь определенный класс и иметь экземпляр класса для сохранения нагрузки и т.д.
  • У него нет сайта, но есть папка с примерами.

Ответ 11

Мне нравится Idiorm и Paris и использовать их как в крошечных проектах. Idiorm - это реальный ORM, тогда как Париж является активной реализацией записи. Вы можете использовать любой из них, который вы бы предпочли.

Существует также вилка, называемая Granada, которая построена над Idiorm и Paris, и добавляет поддержку, такую ​​как загружаемая загрузка и т.д.

Ответ 12

Реляционный сопоставитель объектов (ORM) для PHP, который находится поверх мощного уровня абстракции базы данных (DBAL). Одной из его ключевых особенностей является возможность записи запросов к базе данных в проприетарном объектно-ориентированном диалекте SQL под названием Doctrine Query Language (DQL), вдохновленном Hibernates HQL. Это дает разработчикам мощную альтернативу SQL, которая поддерживает гибкость, не требуя ненужного дублирования кода.