【问题标题】:Doctrine return error with "eq", no with "in"“eq”的教义返回错误,“in”没有
【发布时间】:2018-12-04 07:54:45
【问题描述】:

使用 Symfony 和 Doctrine,“eq”子查询出现错误:

没问题,没有错误:

public function getForums()
{
    $qb = $this->createQueryBuilder('fc');

    return $qb
        ->innerJoin('fc.versions', 'fcv')
        ->innerJoin('fc.versions', 'fcvl', 'WITH', $qb->expr()->in(
            'fcvl.id',
            $this->_em->createQueryBuilder()
                ->select('MAX(v.id)')
                ->from(ForumCategoryVersion::class, 'v')
                ->where('v.forumCategory = fc')
                ->getDQL()
        ))
        ->select('fc, fcv')
        ->getQuery()
        ->getResult();
}

in 替换为eq

public function getForums()
{
    $qb = $this->createQueryBuilder('fc');

    return $qb
        ->innerJoin('fc.versions', 'fcv')
        ->innerJoin('fc.versions', 'fcvl', 'WITH', $qb->expr()->eq(
            'fcvl.id',
            $this->_em->createQueryBuilder()
                ->select('MAX(v.id)')
                ->from(ForumCategoryVersion::class, 'v')
                ->where('v.forumCategory = fc')
                ->getDQL()
        ))
        ->select('fc, fcv')
        ->getQuery()
        ->getResult();
}

我有这个错误:

[语法错误] 第 0 行,第 208 列:错误:预期文字,得到 'SELECT'

【问题讨论】:

  • 然后使用in,而不是eq。你有什么问题?
  • 实际上,第二个想法,您可以在学说的 github 存储库上创建一个增强问题,并要求使用括号是可选的。在一种情况下得到支持而不在另一种情况下得到支持是很奇怪的。

标签: mysql symfony doctrine-orm doctrine


【解决方案1】:

子查询需要使用括号 ()

->innerJoin('fc.versions', 'fcvl', 'WITH', $qb->expr()->eq(
        'fcvl.id',
        '(' . $this->_em->createQueryBuilder()
            ->select('MAX(v.id)')
            ->from(ForumCategoryVersion::class, 'v')
            ->where('v.forumCategory = fc')
            ->getDQL() . ')'
    ))

参考文献

【讨论】:

    猜你喜欢
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2012-04-14
    相关资源
    最近更新 更多