我正在我的控制器中进行查询:
$aviso = $em->getRepository("FabricacionBundle:Aviso")->findBy(array("fecha" => $fecha));
$dql = "SELECT a FROM PedidosBundle:Articulo a WHERE a.aviso = :aviso";
if(isset($_GET['filterField']) && isset($_GET['filterValue'])){
$dql = "SELECT a FROM PedidosBundle:Articulo a JOIN ProductosBundle:Producto p WHERE a.aviso = :aviso";
$dql .= " AND " . $_GET['filterField'] . " LIKE '%" . $_GET['filterValue'] . "%'";
}
$query = $em->createQuery($dql)
->setParameter("aviso", $aviso[0]->getId());
//dump($query);die();
$paginator = $this->get('knp_paginator');
$articulos = $paginator->paginate(
$query,
$request->query->get('page', 1),
25
);
当我不使用过滤器时,这项工作,但当我使用过滤器时,我得到下一个错误:
Cannot count query which selects two FROM components, cannot make distinction
问题出在哪里?谢谢!
答案 0 :(得分:0)
你在运行什么SQL引擎?
请注意,将$ _GET变量中的任何内容直接插入到SQL查询中通常是一种非常糟糕的做法,因为这会导致SQL注入。
想象一下,有人在\'; DROP TABLE something; --
发送了$_GET['filterField']
- 一切都消失了。
从我的头脑中,缺乏加入条件。