请告诉我我做错了什么?智取Doctriny并通过
DQL
使用子查询进行左连接的可能性有哪些
我的代码
$subQuery = $this->em->createQueryBuilder()
->select('apd')
->from(TABLE2::class, 'apd')
->where('apd.status = :status')
->andWhere('apd.date > :date')
->getDql();
$query =$this->em->createQueryBuilder()
->select(
"date_format(c.dateCall , '%Y-%m-%d') as date"
)
->from(TABLE1::class, 'c')
->leftJoin(
sprintf('(%s)', $subQuery),
'apd',
Join::WITH,
'c.column = apd.column'
)
->where('c.dateCall >= :date')
->setParameter('date', '2023-07-10')
->setParameter('status', 'active')
->setParameter('date', $date)
->groupBy('p.name, dates')
->getQuery()
->getResult();
错误
[Semantical Error] line 0, col 275 near 'JOIN (SELECT': Error: Subquery is not supported here
通过
createnativequery
是不可能的,必须借助DQL
我不确定您想要实现什么,但我认为可能没有必要尝试在您的示例中加入子查询。您不能直接加入 Table2 并将 where 条件添加到主查询中吗? 我当时是这样想的:
$query =$this->em->createQueryBuilder()
->select(
"date_format(c.dateCall , '%Y-%m-%d') as date"
)
->from(TABLE1::class, 'c')
->leftJoin('c.table2', 'apd')
->where('c.dateCall >= 2023-07-10')
->andWhere('apd.status = :status')
->andWhere('apd.date > :date')
->setParameter('status', 'active')
->setParameter('date', $date)
->groupBy('p.name, dates')
->getQuery()
->getResult();
请记住,我不知道哪个“日期”参数应该放在哪里,您必须根据需要进行调整,但不可能有两个具有相同名称的参数。您可以像上面那样做,也可以稍微不同地命名第二个参数。
我也不确定
'p.name'
来自哪里,因为您还没有定义别名“p”。如果您使用第三张桌子,您应该确保也加入该桌子。
希望有帮助!