ORM - это все или ничего? - PullRequest
       9

ORM - это все или ничего?

8 голосов
/ 22 сентября 2010

Если я использую ORM, скажем, с Zend или Symfony.Это все или ничего?

Я хотел бы использовать ORM, но в некоторых случаях я хочу оптимизировать производительность и сам написать запрос, чтобы получить все необходимое.Поэтому, если я начну использовать ORM, будет ли трудно сделать это по-старому, как только я включу его в свой проект?

Ответы [ 3 ]

9 голосов
/ 22 сентября 2010

Большинство ORM позволяют запускать специальные запросы.

6 голосов
/ 22 сентября 2010

Используя Doctrine, довольно легко «вырваться» из ORM.Doctrine позволяет писать запросы четырьмя различными способами:

  • DQL.Собственный язык запросов Doctrine, который обладает всеми преимуществами Doctrine.
  • «raw» DQL («Собственные запросы» в Doctrine2).Это похоже на DQL, но позволяет немного больше гибкости в командах (например, специфические особенности базы данных).В этом режиме вам нужно будет немного подробнее указать, как компоненты связаны друг с другом.
  • SQL, используя PHP PDO.Вы можете использовать Doctrine_Connection для получения экземпляра PDO, который позволяет вам писать запросы, но при этом имеет дополнительную безопасность и простоту использования, предоставляемую PDO.
  • raw SQL.Хотя я не уверен, почему вы этого хотите, я думаю, что Doctrine обеспечивает это, если нет, вы всегда можете полностью выйти из Doctrine.

Если вы используете Doctrine внутри Symfony,в Symfony нет абсолютно никаких функций, которые бы блокировали использование Doctrine, даже если он включен.

Последнее предупреждение: если вы используете некоторые из расширенных функций Doctrine (например, события или поведение), их будет сложно связать при выполнении запросов вне DQL.

0 голосов
/ 24 апреля 2012

Вы можете смешивать и сочетать все, что вам нравится.Основным риском является внесение несовместимых несоответствий между вашими инструментами.Гипотетический пример:

Если у меня есть объект ORM doctrine2, называемый Пользователь, и я использую Zend_Db_Table для изменения некоторых значений между сбросами в таблице пользователей, у меня могут быть некоторые непреднамеренные побочные эффекты или нежелательное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...