我想在控制器中使用SQL从我的数据库中选择一些东西。
我想从数据库中获取过去12小时内的所有活动。
这是我的控制器代码:
public function SendDailyReportAction(Request $request){
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery("SELECT * FROM MainCoreBundle:Event WHERE added_on >= DATE_SUB(NOW(), INTERVAL 12 HOUR)");
$statement = $query->getResult();
var_dump($statement);
return $this->render('MainAdminBundle:Reports:index.html.twig');
}
我做错了什么?选择全部(*)的替代方案是什么? 我是否写过实体的好路径?
ERROR:
[Syntax Error] line 0, col 7: Error: Expected IdentificationVariable | ScalarExpression | AggregateExpression | FunctionDeclaration | PartialObjectExpression | "(" Subselect ")" | CaseExpression, got '*'
我决定这样做:
public function SendDailyReportAction(Request $request){
$em = $this->getDoctrine()->getManager();
$query = $em->createQuery("SELECT e FROM MainCoreBundle:Event e WHERE e.date >= DATE_SUB(CURRENT_DATE(), 4, 'MONTH')");
$statement = $query->getResult();
var_dump($statement);
return $this->render('MainAdminBundle:Reports:index.html.twig');
}
我改变了什么:
并添加为@JoëlSalamin说别名 e。
答案 0 :(得分:2)
首先,我建议您将DQL放入Repository类中,以保证代码整洁。但要回答您的问题,请执行以下操作:
$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
$results = $qb->select('e')
->from('MainCoreBundle:Event','e')
->where('e.addedOn >= :datetime')
->setParameter('datetime', new \DateTime('-12 hours'))
->getQuery()
->getOneOrNullResult();
return [compact('results')];
答案 1 :(得分:0)
以下是您的查询,其中包含一些更正:
...
$query = $em->createQuery("SELECT e FROM MainCoreBundle:Event e WHERE e.added_on >= DATE_SUB(NOW(), INTERVAL 12 HOUR)");
...
希望这会对你有所帮助。
PS:看一看:Doctrine - Querying for objects using Query Builder。这可以极大地帮助您使用Doctrine Query Builder的强大功能查询数据库。