Я начинаю новый проект с symfony, который легко интегрируется с Doctrine и Propel , но мне, конечно, нужно сделать выбор ... Мне было интересно, есть ли у более опытных людей общие плюсы и / или минусы для перехода с любой из этих двух?
Большое спасибо.
РЕДАКТИРОВАТЬ: Спасибо за все ответы, полезные вещи. На этот вопрос нет действительно правильного ответа, поэтому я просто отмечу как одобренный тот, который получил наибольшее количество голосов.
Ответы:
Я бы пошел с Доктриной. Мне кажется, что это гораздо более активный проект, и, будучи ORM по умолчанию для symfony, он лучше поддерживается (хотя официально ORM считаются равными).
Кроме того, мне больше нравится, как вы работаете с запросами (DQL вместо критериев):
(Реализация Doctrine для меня гораздо более интуитивна).
Кроме того, мне очень нравится, как вы управляете отношениями в Doctrine.
Я думаю, что эту страницу из документации Doctrine стоит прочитать: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained
Подводя итог: если бы я начинал новый проект или должен был бы выбирать между изучением Doctrine и Propel, я бы в любой день выбрал Doctrine.
источник
Я предвзято, так как я немного помогаю в следующем выпуске Propel, но вы должны учитывать, что Propel действительно был первым доступным ORM, затем немного отставал, когда Doctrine был создан, но теперь снова активно развивается. Symfony 1.3 / 1.4 поставляется с Propel 1.4, где большинство сравнений останавливается на Propel 1.3. Кроме того, следующий выпуск Propel (1.5) будет содержать множество улучшений, особенно в создании ваших критериев (что приведет к меньшему количеству кода, который вам нужно писать).
Мне нравится Propel, потому что он кажется менее сложным, чем Doctrine: большая часть кода находится в нескольких сгенерированных классах, тогда как Doctrine разделила функциональность на множество классов. Мне нравится хорошо разбираться в библиотеках, которые я использую (не слишком много «магии»), но, конечно, у меня больше опыта работы с Propel, так что, возможно, Doctrine не так уж сложна за кулисами. Некоторые говорят, что Propel быстрее, но вы должны проверить это сами и подумать, перевешивает ли это другие различия.
Возможно, вам также следует подумать о доступности плагинов Symfony для различных фреймворков. Я считаю, что Propel имеет здесь преимущество, но я не знаю, сколько из перечисленных плагинов все еще обновлено до последней версии Symfony.
источник
Все сводится к личным предпочтениям. Я использую Propel, потому что (среди прочего) мне нравится тот факт, что у всего есть свой конкретный метод получения и установки. В Doctrine это не так.
Propel:
доктрина:
Причина, по которой мне нравятся геттеры и сеттеры, заключается в том, что я могу добавить в них любую логику, если мне нужно. Но это только мои личные предпочтения.
Я должен также добавить, что, хотя в прошлом Propel был медленным, сейчас он снова активно развивается. За последние несколько месяцев он выпустил несколько новых версий. Самая последняя версия Propel включает в себя «свободный интерфейс запросов», аналогичный интерфейсу Doctrine , поэтому вам больше не нужно использовать критерии, если вы этого не хотите.
источник
Следует отметить, что Doctrine 2 в
настоящее времянаходится встадии разработки ивыпущена [ed], и ее функции почти полностью отличаются от текущей стабильной версии Doctrine 1. Она полагается на шаблон Data Mapper вместо Active Record и использует «диспетчер сущностей» для обработки сохраняемости. логика. После выпуска он будет больше похож на Java Hibernate (Doctrine 1 больше похож на ActiveRecord Rails).Я занимался разработкой альфа-версии Doctrine 2 и должен сказать, что она на голову выше Doctrine 1 (только мое мнение, и я никогда не использовал Propel). Велики шансы, что сообщество Doctrine будет двигаться к ней, когда она будет выпущена.
Я бы посоветовал вам ознакомиться с Doctrine, но если вы предпочитаете стиль Active Record, который сейчас используют Propel и Doctrine, вы можете просто придерживаться Propel.
источник
Эти две ссылки несколько устарели, поэтому вы, тем не менее, охватываете некоторые общие сведения, в основном вам придется оценить свой опыт работы с фреймворком как таковым, основным недостатком доктрины является невозможность иметь IDE, которая позволяет вам автоматически кодировать в этом движении. победитель, ход обучения и доктрина очень разные, его легче продвигать, если вашему проекту нужно будет управлять сложной моделью данных, использует доктрину, если вы хотите быстро работать с ORM, который лучше всего документирован, и найти дополнительную поддержку в Propel Использование Интернета является гораздо более зрелым, и я считаю, что используется наиболее часто.
http://propel.posterous.com/propel-141-is-out
источник
Я бы предложил использовать propel 1.6, который лучше подходит для функции автозаполнения IDE.
источник
Я не использую ORM PHP 5 без фреймворка, но вот несколько хороших сравнительных публикаций (на случай, если вы их еще не видели):
http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/
http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine
Оба считают, что Doctrine является новым поколением ORM для Symfony.
источник
После использования их обоих в течение нескольких лет я предпочитаю Propel 2 Doctrine просто в зависимости от того, как вы строите свою логику запроса. Доктрина настолько глубока, насколько это возможно, и управление многими ее аспектами соответствует этому уровню. Я считаю, что Propel имеет более гибкий и объектно-ориентированный способ построения и управления взаимодействиями запросов.
Для меня это привело к меньшему количеству кода в модели и большему количеству структур вокруг того, как логика может / будет обрабатываться. Это привело к тому, что многие взаимодействия были просто объединены в общую функциональность. (В конце концов, 90% того, что вы будете делать с базой данных, будет лишь некоторой грубой работой.)
В конце концов, оба являются мощными, управляемыми и выполнят свою работу. Мои личные проекты и интересы используют Propel ORM 2 и будущие проекты, если они все еще написаны на PHP, пойдут по этому пути.
Я использую оба ежедневно в течение последних 3-4 лет.
источник
Я бы предложил использовать плагин DbFinder . На самом деле это очень мощный плагин, который поддерживает оба, и довольно мощный. На самом деле мне нравится использовать его больше, чем то и другое.
источник
Если я не ошибаюсь, оба ORM используют схему на основе XML, и создание этого определения схемы довольно громоздко. Если вам нужна простая схема на основе PHP с плавным стилем. Вы можете попробовать LazyRecord https://github.com/c9s/LazyRecord, он поддерживает автоматическую миграцию и генераторы сценариев обновления / понижения. И все файлы классов создаются статически без затрат времени выполнения.
источник