私のアプリで新しいクエリを作成しています。 フィルターを使用していますが、オプションは異なります(含めるかどうかは同じです)。私はNOT LIKE
、!=
と<>
てみましたオペレータ "NOT LIKE"が正しく機能しない
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の結果を返す...
: 私は「違う」演算子を使用している場合は、私のクエリは次のように生成します結果は返されません。
私の状態に何か問題がありますか?私は、問題を見ることはできません。
おかげ
EDIT 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
そのLIKE 'Articulo'。 .. なぜ???!!!
あなたのクエリにはJOIN条件が含まれていません。これは不審なものです。 –
@FrankそれはDQLなので、Doctrineは舞台裏で条件を追加します。 –
サンプルデータを含めることができますか? –