我正在使用Symfony 4.2和Sonata Admin软件包,并且试图在我的一个管理列表视图中显示特定列表。
我想按组显示最新的用户。我创建了SQL查询,现在尝试将其转换为QueryBuilder。
SELECT * FROM users
WHERE (created_at, group_id) IN (
SELECT MAX(created_at), group_id
FROM users
GROUP BY group_id)
我的Sonata Admin类中的createQuery函数:
public function createQuery($context = 'list')
{
$container = $this->getConfigurationPool()->getContainer();
$em = $container->get('doctrine.orm.entity_manager');
$expr = $em->getExpressionBuilder();
$subQuery = $em->createQueryBuilder()
->select('MAX(c.createdAt), c.group')
->from('ApiBundle:Configuration', 'c')
->groupBy('c.group')
->getDQL();
$query = parent::createQuery($context);
$alias = $query->getRootAlias();
$query->where($expr->in('('.$alias.'.createdAt, '.$alias.'.group)', $subQuery));
}
不幸的是,它不起作用,我不确定这是正确的方法。 我可以通过仅在in()表达式中选择createdAt使其工作,但这并不是我最后想要的。
这是我遇到的错误。
[Syntax Error] line 0, col 77: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got ','
如何使用QueryBuilder使其工作? 谢谢。