学说子查询左连接

问题描述 投票:0回答:1

请告诉我我做错了什么?智取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

symfony doctrine dql
1个回答
0
投票

我不确定您想要实现什么,但我认为可能没有必要尝试在您的示例中加入子查询。您不能直接加入 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”。如果您使用第三张桌子,您应该确保也加入该桌子。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.