2017-05-22 10 views
0

私のアプリで新しいクエリを作成しています。 フィルターを使用していますが、オプションは異なります(含めるかどうかは同じです)。私は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'。 .. なぜ???!!!

+1

あなたのクエリにはJOIN条件が含まれていません。これは不審なものです。 –

+0

@FrankそれはDQLなので、Doctrineは舞台裏で条件を追加します。 –

+1

サンプルデータを含めることができますか? –

答えて

0

おそらく、UIロジック/クエリパラメータを設定するコードにエラーがあります。この:

$valores = explode(",",$_GET['filterValue']); 
    $filas = explode(",",$_GET['filterField']); 
    $operadores = explode(",",$_GET['filterOperator']); 

はそうあなたがfilterValue、filterFieldとfilterOperatorを移入するコードを見てみる必要があります

t1_.nombre LIKE 'articulo' 

t1_.nombre NOT LIKE '%articulo%' 

の両方を生成します。

+0

はい、私のロジックに何かエラーがあるはずです...しかし、このコードは正しいdql(私の例では最初のdql)を生成します...私はその問題がサービスの内側にあると思うknp_paginator –

関連する問題