Можно ли использовать агрегированные значения в запросе Doctrine_RawSql? Вот что я пытаюсь сделать:
$q = new Doctrine_RawSql(); $q->select('{q.*}, AVG(a.value) AS avg'); $q->from('-- complex from clause'); $q->addComponent('q', 'Question');
Однако SQL, созданный Doctrine, оставляет только столбцы из question
таблицы и опускает агрегированное значение avg
.
Я никогда раньше не использовал Doctrine_RawSql, но я делал необработанные SQL-запросы через Doctrine, используя любой из этих двух методов:
Doctrine_Manager::getInstance()->getCurrentConnection()->fetchAssoc("YOUR SQL QUERY HERE");
а также
$doctrine = Doctrine_Manager::getInstance()->getCurrentConnection()->getDbh(); $result = $doctrine->query('YOUR SQL QUERY HERE');
Кажется, что эти два метода оставят ваш оригинальный SQL неповрежденным.
Я должен отметить, что я использую Doctrine 1.2 в контексте приложений Symfony 1.4, но AFAIK, это будет работать для вас, независимо от того, какие другие структуры вы можете использовать.
Вы посмотрели раздел кулинарной книги доктрины по агрегатам ? Они используют метод createQuery
для диспетчера сущностей, а не RawSql
объектов RawSql
.
Я не разбираюсь в доктрине, но это может быть хорошим началом!
Попробуйте поместить агрегированное поле в SQL и затем извлечь его с помощью фигурных скобок. Я использую SQL-подзапрос.
$q = new Doctrine_RawSql(); $q->select('{s.*}, {s.avg} AS avg'); $q->from('(SELECT q.*, AVG(value) AS avg FROM Question AS q) AS s'); $q->addComponent('s', 'Question');
Меня устраивает.