Doctrine2 子查询导致错误:预期 DoctrineORMQueryLexer::T_FROM,得到


Doctrine2 subquery leads to Error: Expected DoctrineORMQueryLexer::T_FROM, got ','

我只是设法找到了SQL查询,以我想要的方式检索数据。现在我尝试将其放入 Doctrine2 查询中,但我收到了消息

Error: Expected Doctrine'ORM'Query'Lexer::T_FROM, got ','

SQL 查询有点像:

SELECT * 
FROM somedb 
WHERE (config_id,version) IN 
    ( SELECT config_id, MAX(version)
    FROM somedb
    WHERE projectid = 1
    GROUP BY config_id
    ) 
AND project_id = 1

在做一个地方获得灵感..原则 2 中的 IN 子查询导致以下原则查询生成器

$qb = $this->getEntityManager()->createQueryBuilder();
$qb2 = $this->getEntityManager()->createQueryBuilder();
//define subquery
$qb2->select(['somedb.configId', 'MAX(somedb.version)']);
$qb2->from('DataObjects'Entities'someDB', 'somedb');
$qb2->where('somedb.template = :variable');
$qb2->groupBy('somedb.configId');
$qb2->setParameter("variable" , $variable);
//define mainquery
$qb->select('somedb');
$qb->from('DataObjects'Entities'someDB', 'somedb');
$qb->where($qb->expr()->in(['somedb.configId', 'somedb.version'], $qb2->getDQL()));
$qb->andWhere('somedb.template = :variable');
$qb->setParameter("variable" , $variable);
return $qb->getQuery()->execute(null , Query::HYDRATE_ARRAY);

不幸的是,这条错误消息并没有给我一个线索,谷歌搜索它也没有带来任何启发。我对教义很陌生,在我坚持 SO 帖子的版本后,我不知道该怎么办。 有什么想法吗?

乔纳森

也许这个解决方案不是很好,但它解决了类似的问题。

// ...   
//define subquery
$qb2->select('CONCAT(somedb1.configId, '''' ,MAX(somedb1.version)');
$qb2->from('DataObjects'Entities'someDB', 'somedb1');
$qb2->where('somedb1.template = :variable');
$qb2->groupBy('somedb1.configId');

//define mainquery
$qb->select('somedb');
$qb->from('DataObjects'Entities'someDB', 'somedb');
$qb->where($qb->expr()->in('CONCAT(somedb.configId, '''', somedb.version)', $qb2->getDQL()));
$qb->setParameter("variable" , $variable);