Doctrine - SubQuery语法错误

时间:2016-11-09 13:36:21

标签: symfony doctrine-orm

我在我的存储库中有这个查询:

public function getIcoWithErrorQB()
{
    $query = $this->createQueryBuilder('iq');
    $subQuery = $this->createQueryBuilder('iqSub');
    $maxDateQuery = $this->createQueryBuilder('maxDateQuery');

    $query
        ->where(
            $query->expr()->in(
                'iq.id',
                $subQuery
                    ->select('iqSub.id')
                    ->where('iqSub.codeResponse != 0')
                    ->andWhere(
                        $subQuery->expr()->in(
                            'iqSub.lastDateRun',
                            $maxDateQuery->select('max(maxDateQuery.lastDateRun)')
                                ->groupBy('maxDateQuery.id')
                                ->getDQL()
                        )
                    )
                    ->groupBy('iqSub.order')
                    ->getDQL()
            )
        )
    ;

    return $query;
}

当数据库具有codeResponse<>的数据时,它非常有效。到0,

但是当没有codeResponse<>到0我有这个错误:

  

[语法错误]第0行,第241栏:错误:预期文字,得到')'

我不明白这个错误。

1 个答案:

答案 0 :(得分:0)

我不确定但是下面的代码可以帮助你

public function getIcoWithErrorQB()
{
    $query        = $this->createQueryBuilder('iq');
    $subQuery     = $this->createQueryBuilder('iqSub');
    $maxDateQuery = $this->createQueryBuilder('maxDateQuery');

    // Get Max value    
    $maxDateQuery->select('max(maxDateQuery.lastDateRun) as maxRun')->groupBy('maxDateQuery.id')->getQuery()->getResult();

    // SubQuery
    $subQuery->select('iqSub.id')->where('iqSub.codeResponse != 0')->groupBy('iqSub.order');
    if ($maxDateQuery) {
        $subQuery->andWhere(
            $subQuery->expr()->in(
                'iqSub.lastDateRun',
                $maxDateQuery
            )
        )
    }
    $subQueryObj = $subQuery->getQuery()->getResult();

    // Main Query
    if ($subQueryObj) {
        $query->where(
            $query->expr()->in(
                'iq.id',
                $subQueryObj
            )
        );
    }
    return $query;
}

<强>更新-1

替换

$maxDateQuery->select('max(maxDateQuery.lastDateRun) as maxRun')->groupBy('maxDateQuery.id')->getQuery()->getSingleScalarResult();

$maxDateQuery->select('max(maxDateQuery.lastDateRun) as maxRun')->groupBy('maxDateQuery.id')->getQuery()->getResult();

<强>更新-2

替换

if (!empty($maxDateQuery['maxRun'])) {

if ($maxDateQuery) {

请让我们输出上面的代码。所以,我们可以提前解决