Я использую 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? Спасибо.