используя Symfony 3.2.4, doctrine и postgres 9.6, у меня есть 2 таблицы с большими данными, и мне нужно получить записи таблицы результатов соединения (с функцией sql es: sum, avg и т. д.) в приемлемое время.
Ну, я создал материализованное представление, и теперь оно очень быстрое!
ДА УЖ!
Но … как я могу выполнить запрос DQL с Doctrine / Symfony ??
Я пытался создать сущность из материализованного представления, но он не обнаружен.
D: \ eclipse_neon_workspace \ myproject> php bin \ console
доктрина: отображение: импорт аннотации BackendBundle
—filter =
База данных не имеет картографической информации.
Итак, я попытался написать простой запрос, но доктрина ожидает связку сущностей …
[2017-04-03 23:13:37] request.CRITICAL: необработанное исключение PHP
Doctrine \ ORM \ Query \ QueryException: «[Семантическая ошибка] строка 0, столбец 80
около ‘Stats’: Ошибка: класс ‘Stats’ не определен. «at
D: \ eclipse_neon_workspace \ MyProject \ поставщика \ доктриной \ ORM \ Lib \ Doctrine \ ORM \ Query \ QueryException.php
строка 63 {«исключение»: «[объект] (Doctrine \ ORM \ Query \ QueryException (код: 0): [Семантическая ошибка] строка 0, столбец 80 рядом с «stats»: ошибка: класс «Stats»
не определен. в
D: \ eclipse_neon_workspace \ MyProject \ поставщик \ доктрина \ ORM \ Lib \ Doctrine \ ORM \ Query \ QueryException.php: 63,
Doctrine \ ORM \ Query \ QueryException (код: 0): ВЫБРАТЬ
stasgeojson (l.geom) как geom ОТ BackendBundle: MyTable l LEFT
ПРИСОЕДИНЯЙТЕСЬ Статистика Статистика С stats.key = l.key ГДЕ l.filter
в (77004) в
D: \ eclipse_neon_workspace \ MyProject \ поставщика \ доктриной \ ORM \ Lib \ Doctrine \ ORM \ Query \ QueryException.php: 41) «}
[]
Как, черт возьми, я использую материализованное представление с учением ????
Спасибо заранее
Наконец, я не нашел решений … DQL не поддерживает VIEW или MATERIALIZED VIEW, и нет ничего для генерации сущностей из этих объектов.
Итак, я создал простой $ em-> createNativeQuery с использованием собственного SQL, и все это работает, но я думаю, что это немаловажный пробел
Других решений пока нет …