использовать построитель запросов или доктрину sql

Я делаю некоторые исследования, чтобы ответить на него, но я не нахожу.

Я хотел бы знать, как лучше всего выбирать (с объединением) между:

использовать построитель запросов?

$this->getEntityManager()->createQueryBuilder()
->select('e')
->from('Module\Entity\MyEntity 'e')
->innerJoin('Module\Entity\MyEntity2', 'e2', 'WITH', 'e.e2_id = e2.id')...
->where("...")

или же

использовать оператор SQL?

$db = $this->getEntityManager()->getConnection();

$sql = "SELECT * FROM myEntity e
INNER JOIN myEntity2 AS e2 ON e2.id = e.e2_id....
WHERE ....;"

это безопаснее, быстрее, …?

2

Решение

Оба имеют свои преимущества и недостатки, поэтому все зависит от того, что вам нужно.

SQL

  1. чистый SQL-оператор немного быстрее, так как вам не нужно выполнять дополнительную логику из Doctrine
  2. поскольку Doctrine пытается поддерживать множество различных баз данных, некоторые специфические функции баз данных не поддерживаются, поэтому вы не можете использовать их или внедрять их в Doctrine, что может стать большой работой

DQL

  1. Доктрина заставляет вас использовать подготовленные операторы, что упрощает предотвращение атак инъекций, если вы настаиваете на именованных параметрах. Но это можно сделать и с помощью чистого SQL и PDO, используя именованные параметры.
  2. Работать с сущностями намного проще. Данные автоматически связываются с объектами, и они управляются через ваше приложение. Конечно, это приводит к некоторому снижению производительности
  3. Недостатком объединений является то, что вы всегда объединяете всю таблицу, а не, может быть, только два столбца, которые вам нужны. И вам нужны определенные отношения, если результат должен быть полезен для объекта
  4. Самое большое преимущество, вероятно, также используется реже: если вы меняете базу данных, вам не нужно переписывать все ваши запросы, чтобы соответствовать новой структуре запросов.

Иногда я оказываюсь в ситуации, когда я могу решить проблему непосредственно в запросе SQL, но Doctrine не поддерживает некоторые конструкции, которые мне придется использовать. Поэтому мне нужно решить, хочу ли я потерять преимущества Doctrine и перейти на решение на чистом SQL или использовать DQL и добавить еще немного кода php, возможно, даже больше ненужных запросов. Но это сильно зависит от ситуации и не может быть ответа в целом.

В конце концов, я бы использовал DQL везде, где это возможно, потому что его легче писать и поддерживать, и переключаться на SQL только тогда, когда мне нужен какой-то запрос для высокой производительности.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]