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

Какой ORM использовать с Symfony2?

Я начинаю новый проект с Symfony2, и я не уверен, какой ORM выбрать. Я слышал некоторые плохие вещи о Doctrine2, особенно когда речь идет о наследовании и DQL. Кажется, что Propel вернулся из мертвых, но, с другой стороны, нет никаких гарантий, что он будет длиться вечно.

Есть ли у вас какие-либо советы?

4b9b3361

Ответ 1

Я могу сказать, что Propel является наиболее подходящим ORM для использования с Symfony2. Он отлично работает и не планирует останавливать действия на нем. Проект Propel2 находится на пути к лучшему, чем Propel 1.6.x(что действительно замечательно).

Не стесняйтесь использовать Propel, многие пользователи, включая Sensio Labs, используют его!

Вот документ Propel для Symfony2: http://www.propelorm.org/documentation/#working_with_symfony2

Примечание. В Stack Exchange есть связанная тема: https://softwareengineering.stackexchange.com/questions/48760/should-i-choose-doctrine-2-or-propel-1-5-1-6-and-why/117078#117078

Некоторые моменты, которые я забыл:

  • Поведения являются частью Propel, никто не предоставлен в Doctrine2. Это означает, что Propel официально поддерживает их и обеспечивает поддержку/улучшения. Не уверен в доктринах.
  • Propel очень быстрый. Я согласен, что Doctrine2 лучше, чем Propel для массовых вставок.
  • Propel 10 лет, стабилен и используется многими людьми.
  • Нет еще одного языка для изучения с Propel.
  • Propel2 действительно объектно ориентирован, благодаря современным API-интерфейсам.
  • Doctrine2 ORM не использует один и тот же API с ODM, поэтому вы можете использовать Propel с D2 ODM, как D2 ORM и ODM, здесь нет профи.
  • Propel использует генерацию кода для определенных платформ, поэтому он оптимизирован для ваших нужд и быстро благодаря компонентам времени исполнения и генератора.

Некоторые моменты, которые мне нравятся в Doctrine2:

  • Аннотации.
  • Весь код, потому что он довольно недавно.

Проблема не в Doctrine DBAL, а о Doctrine ORM. И Propel2 на пути к улучшению всего кода Propel 1.6.x.

О, и я долго использовал Doctrine2;)

Ответ 2

Мой личный выбор - Doctrine 2 по нескольким причинам:

  • Концептуально это очень легко понять. Работа с сущностями и менеджером сущностей проста. Мне нравится, как сущности не нуждаются в расширении любого базового модельного класса (например, в Доктрине 1).

  • Это стандартная ORM для Symfony2 прямо сейчас. Хотя Symfony2 официально не может быть официально одобрен, это то, что используют большинство людей, и, следовательно, для него доступно множество информации. Значимость этого огромна.

Вы упомянули, что слышали "плохие вещи о Doctrine2" - важно, чтобы вы не поняли, что ORM будет идеально. Я столкнулся с некоторыми проблемами, но пока вы думаете творчески, вы можете найти решение. Иногда это решение означает запись исходного SQL, независимо от того, что могут сказать пуристы ORM. Я не сталкивался с ситуацией, когда я сожалел об использовании Doctrine 2.

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

Ответ 3

Я могу сказать, что Propel является наиболее подходящим ORM для использования с Symfony2 Я не согласен. Doctrine2 является родным ORM для Symfony. Он содержится в стандартном дистрибутиве Symfony, доступном здесь: http://symfony.com/download

Документация Symfony описывает работу с Doctrine в основном, а не Propel. Поэтому я не думаю, что выбор Propel слишком очевиден. Я думаю, вы должны действительно весить последствия. Я бы предпочел Учение.

Вот список опций, поддерживаемых пакетом Propel: http://www.propelorm.org/cookbook/symfony2/working-with-symfony2.html