-1

mySql 中的这个查询给了我想要的结果:

SELECT reportcolumn.name 
FROM report 
LEFT Join reportcolumn 
ON report.id=reportcolumn.reportid 
WHERE report.title = "Report"

但是,当我尝试将其编写为 DQL 时,出现语法错误。

        $report = "Reportname";
        $statement = 'SELECT c.name';
        $statement .= ' FROM AcmeDataBundle:Report r';
        $statement .= ' LEFT JOIN AcmeDataBundle:Reportcolumn c';
        $statement .= ' ON r.id=c.reportid';
        $statement .= ' WHERE r.title = :title';
        $em = $this->getDoctrine()->getManager();
        $query = $em->createQuery($statement)
        ->setParameters(array(
            'title'=> $report,
            ));
        $data = $query->getArrayResult();

我应该如何处理语句的“ON”部分。关系是定义的,但如果我把这部分陈述排除在外,我会得到明显错误的结果。

谢谢,马尼沙

4

2 回答 2

0
AcmeDataBundle:Report
AcmeDataBundle:Reportcolumn

应该

AcmeDataBundle.Report
AcmeDataBundle.Reportcolumn

除非这些是真实的表名,在这种情况下,您需要用反引号引用表名。

于 2013-08-09T05:29:43.043 回答
0

在对其他问题进行了更多研究之后,似乎问题在于您不能在dql中使用“ON”。相反,“WITH”是适当的命令。并将查询更改为此,返回与所选报告相关的正确列名集(许多表)。

                $report = "Reportname";
        $statement = 'SELECT c.name';
        $statement .= ' FROM AcmeDataBundle:Reportcolumn c'; //select from the many table
        $statement .= ' LEFT JOIN AcmeDataBundle:Report r';
        $statement .= ' WITH r.id=c.reportid'; //use WITH not ON
        $statement .= ' WHERE r.title = :title';
        $em = $this->getDoctrine()->getManager();
        $query = $em->createQuery($statement)
        ->setParameters(array(
            'title'=> $report,
            ));
        $data = $query->getArrayResult();
于 2013-08-12T06:56:43.567 回答