Я делаю некоторые исследования, чтобы ответить на него, но я не нахожу.
Я хотел бы знать, как лучше всего выбирать (с объединением) между:
использовать построитель запросов?
$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 ....;"
это безопаснее, быстрее, …?
Оба имеют свои преимущества и недостатки, поэтому все зависит от того, что вам нужно.
SQL
DQL
Иногда я оказываюсь в ситуации, когда я могу решить проблему непосредственно в запросе SQL, но Doctrine не поддерживает некоторые конструкции, которые мне придется использовать. Поэтому мне нужно решить, хочу ли я потерять преимущества Doctrine и перейти на решение на чистом SQL или использовать DQL и добавить еще немного кода php, возможно, даже больше ненужных запросов. Но это сильно зависит от ситуации и не может быть ответа в целом.
В конце концов, я бы использовал DQL везде, где это возможно, потому что его легче писать и поддерживать, и переключаться на SQL только тогда, когда мне нужен какой-то запрос для высокой производительности.
Других решений пока нет …