我在我的存储库中有这个查询:
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栏:错误:预期文字,得到')'
我不明白这个错误。
答案 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) {
请让我们输出上面的代码。所以,我们可以提前解决