带有Sonata Admin的createQuery()中的复杂QueryBuilder表达式

时间:2019-10-14 16:57:00

标签: doctrine-orm doctrine sonata-admin

我正在使用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使其工作? 谢谢。

0 个答案:

没有答案