Сложное выражение QueryBuilder в createQuery () с администратором Sonata - PullRequest
0 голосов
/ 14 октября 2019

Я использую 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)

Моя функция createQuery в моем классе администратора Sonata:

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));
}

К сожалению, он не работает иЯ не уверен, что это правильный способ сделать это. Я мог бы заставить его работать, только выбрав createAt в выражении in (), но это не то, что я хочу получить в конце.

Вот ошибка, которую я получил.

[Syntax Error] line 0, col 77: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got ','

Как я могу заставить его работать с помощью QueryBuilder? Спасибо.

...