Синтаксическая Ошибка Подзапроса Доктрины

У меня есть этот запрос в моем репозитории:

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, col 241: Error: Expected Literal, got ‘)’

Я не понимаю этой ошибки.

1 ответ

  1. Я не уверен, но ниже код может помочь вам

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

    Update-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();
    

    Update-2

    Заменять

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

    с

    if ($maxDateQuery) {
    

    Пожалуйста препятствуйте нам выход вышеуказанного кода. Так, мы можем исправить вперед