Intereting Posts
Регулярное выражение PHP для фильтрации URL-адресов из определенных доменов для использования в плагине vBulletin Ajax Form Submit с кнопкой отправки Маршруты Laravel-4 с параметрами вызываются дважды Функция ereg_replace () устарела – как очистить эту ошибку? удалить escape-последовательности из строки в php Zend Framework 2 – Doctrine 2 – Как использовать GeoPointFields Получение значений переключателя для использования в инструкции switch в PHP использование включает кросс-домен, содержащий php-код – сбой API групп LinkedIn – получение логотипа группы для нескольких групп в одном запросе API Процесс создания скриптов PHP расположение заголовка php vs php_redirect Можно ли включить «Уведомление: попытка получить свойство не объекта» в фатальную ошибку? Как использовать разбиение на страницы вместе с методом laravel eloquent find in laravel 5.4 Войти на сайт с помощью Gmail Удостоверение формы Symfony 2.3 с помощью handleRequest безумно медленное

Конструктор запросов Symfony2 Doctrine в качестве подзапроса в предложении FROM

Я получил запрос с использованием построителя запросов, который присваивается переменной $qb . Он отлично работает как с PHP, так и с БД. Теперь я пытался использовать этот запрос в качестве подзапроса, как показано ниже:

  $subQuery = $qb->getQuery()->getSql(); $query = 'select res.some_name from ('.$subQuery.') as res'; 

Но я получаю следующее исключение:

 Caused by Doctrine\DBAL\Driver\PDOException: SQLSTATE[HY000]: General error: 1 no such column: res.some_name 

Поскольку Doctrine уже конвертировала $qb в нечто подобное, где Doctrine преобразует исходный SQL-запрос. Например, было что-то названное AS legalentity_name, но оно показывает AS name1:

 select res.some_name from (SELECT o0_.id AS id0, o0_.name AS name1, b1_.id AS id2, b1_.display AS display3, m2_.id AS id4, m2_.total AS total5 FROM Invoice i3_ INNER JOIN CodeableItem c4_ ON i3_.id = c4_.id INNER JOIN MonetaryItem m2_ ON i3_.id = m2_.id AND (1=1) INNER JOIN LineItem l5_ ON c4_.id = l5_.codeableItem_id LEFT JOIN MonetaryItem m6_ ON l5_.id = m6_.id AND (1=1) LEFT JOIN PresetLineItem p7_ ON c4_.id = p7_.codeableItem_id LEFT JOIN MonetaryItem m8_ ON p7_.id = m8_.id AND (1=1) INNER JOIN OrgUnit o0_ ON c4_.legalentity_id = o0_.id AND (1=1) INNER JOIN monetaryitem_listitem m9_ ON m2_.id = m9_.monetaryitem_id INNER JOIN BWListItem b1_ ON b1_.id = m9_.bwlistitem_id AND (1=1) INNER JOIN BWList b10_ ON b1_.bwlist_id = b10_.id AND (1=1) WHERE b10_.type = 'Vendor' GROUP BY c4_.legalentity_id, b1_.active, b1_.attributes, b1_.display, b1_.created, b1_.updated, b1_.lft, b1_.lvl, b1_.rgt, b1_.root, b1_.id, b1_.orgunit_id, b1_.bwlist_id, b1_.parent_id, b1_.rootou_id, m2_.created, m2_.updated, m2_.subtotal, m2_.total, m2_.description, m2_.id, c4_.number, c4_.externalId, c4_.status, c4_.overriddenDuringApproval, i3_.invoiceDate, i3_.dueDate, i3_.poNumber, m2_.rootou_id, c4_.image_id, c4_.legalentity_id, c4_.creator, c4_.owner_id ORDER BY o0_.name ASC, b1_.display ASC) as res 

Мой вопрос: как я могу использовать необработанный SQL из $subQuery ? Любая помощь будет действительно полезной. Ура!

Во-первых, подзапросы в DQL невозможны. См. Раздел Выбор из подзапроса в DQL

Во-вторых, вы помещаете вычисляемый SQL из языка запросов Doctrine (DQL) в подзапрос. Это не работает, поскольку база данных не может найти столбец из-за того, что символы DQL префикс / числовые значения столбцы.

Это значит, что объекты могут правильно отображаться при использовании DQL.

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