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”部分。这种关系是定义的,但是如果我把声明中的那部分留下来,我的结果显然是错误的。
谢谢, MANISHA
答案 0 :(得分:0)
AcmeDataBundle:Report
AcmeDataBundle:Reportcolumn
应该是
AcmeDataBundle.Report
AcmeDataBundle.Reportcolumn
除非这些是真实的表名,否则你需要引用带有反引号的表名。
答案 1 :(得分: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();