我在我的应用中创建了一个新查询。 我使用过滤器,具有不同的选项(包含,相同或不同)。 如果我使用operator"不同的",我的查询生成如下:
SELECT p FROM ProductosBundle:Producto p
LEFT JOIN p.tipo t
LEFT JOIN p.departamento d
WHERE 1=1 AND t.nombre NOT LIKE '%articulo%'
我的产品与" articulo"不同,但返回0结果......
我尝试使用NOT LIKE
,!=
和<>
,但没有返回结果。
我的情况有什么不对吗?我没有看到问题,包含并且相同它有效。
有什么想法吗?感谢
编辑1:
这是我的控制者:
...
$em = $this->get('doctrine.orm.entity_manager');
$dql = "SELECT p FROM ProductosBundle:Producto p LEFT JOIN p.tipo t LEFT JOIN p.departamento d";
if (isset($_GET['filterField']) && isset($_GET['filterValue'])){
$valores = explode(",",$_GET['filterValue']);
$filas = explode(",",$_GET['filterField']);
$operadores = explode(",",$_GET['filterOperator']);
$dql .= " WHERE 1=1";
for($i = 0; $i < count($valores); $i++){
$dql.= " AND ". $filas[$i]. " " . $operadores[$i] ;
if($operadores[$i] == "LIKE" OR $operadores[$i] == "NOT LIKE"){
$dql .= " '%".$valores[$i]."%'";
}else{
$dql .= " '".$valores[$i]."'";
}
}
}
$query = $em->createQuery($dql);
$paginator = $this->get('knp_paginator');
$productos = $paginator->paginate(
$query,
$request->query->get('page', 1),
25
);
EDIT2:
我的探查器正在执行此操作:
SELECT DISTINCT p0_.id AS id_0
FROM producto p0_
LEFT JOIN tipo t1_ ON p0_.tipo = t1_.id
LEFT JOIN departamento d2_ ON p0_.departamento = d2_.id
WHERE t1_.nombre LIKE 'articulo'
AND 1 = 1
AND t1_.nombre NOT LIKE '%articulo%'
LIMIT 25 OFFSET 0
它是一个像'Articulo&#39; ...为什么??? !!!
答案 0 :(得分:0)
据推测,您的UI逻辑/设置查询参数的代码存在错误。这样:
$valores = explode(",",$_GET['filterValue']);
$filas = explode(",",$_GET['filterField']);
$operadores = explode(",",$_GET['filterOperator']);
生成两者
t1_.nombre LIKE 'articulo'
和
t1_.nombre NOT LIKE '%articulo%'
所以你应该看一下填充filterValue,filterField和filterOperator的代码。