2015-04-29 2 views
3

Привет, я пытаюсь построить запрос, используя QueryBuilder и Query\Expr. Моя проблема заключается в создании дополнительного условия, чтобы получить список моделей для всех этих условий?QueryBuilder и под-условия

  • Status является true, а не в списке model имени
  • Status является false, а не в другом списке model имени

Код:

public function process(QueryBuilder $qb) 
{ 
    $cond1 = new Expr\Andx; 
    $cond1->add($qb->expr()->eq('status', 0); 
    $cond2= new Expr\Andx; 
    $cond2->add($qb->expr()->notIn('model', array('308','408')); 
    $cond1->add($cond2); 

    $cond3 = new Expr\Andx; 
    $cond3->add($qb->expr()->eq('status', 1); 
    $cond4= new Expr\Andx; 
    $cond4->add($qb->expr()->notIn('model', array('A1','A2')); 
    $cond3->add($cond4); 

    $qb->andWhere($cond1); 
    $qb->andWhere($cond3); 
} 

класс модели

Class Vehicle{ 
    /** 
    * @var string 
    * 
    * @ORM\Column(name="model", type="string", length=255, nullable=true) 
    */ 
    private $modele; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="make", type="string", length=255, nullable=true) 
    */ 
    private $make; 

    /** 
    * @var boolean (status for vehicule 1 = Used vehicle) 
    * 
    * @ORM\Column(name="status", type="boolean") 
    * @Serializer\Groups({"list", "details"}) 
    */ 
    private $status; 

    //-- Other properties, getter & setter 

} 

Спасибо за помощь

+0

Вам даже нужны эти? :) Да, они делают запрос более читабельным, но логичным образом они могут вообще не иметь значения ... –

+0

@JovanPerovic: Да Мне нужны 'Query Builder' и' Expr'. Причина: запрос строится с помощью коллекции фильтров ... – pietro

+0

Извините, мне показалось, что вам нужно обернуть весь запрос '(' и ')', и мой комментарий был о нем;) –

ответ

0

спасибо до Matteo & pcm

$qb->andWhere(
    $qb->expr()->orX(
     $qb->expr()->andX($qb->expr()->eq("status", 0), $qb->expr()->notIn("model", $listNewModel)), 
     $qb->expr()->andX($qb->expr()->eq("status", 1), $qb->expr()->notIn("model", $listUsedModel)); 
    ) 
); 
+0

Добро пожаловать! – Matteo

2
$qb->andWhere(
    $qb->expr()->andx(
    $qb->expr()->andx(
     $qb->expr()->eq('status', 0), 
     $qb->expr()->andx(
     $qb->expr()->notLike('model', '308'), 
     $qb->expr()->notLike('model', '408') 
    ) 
    ), 
    $qb->expr()->andx(
     $qb->expr()->eq('status', 1), 
     $qb->expr()->andx(
     $qb->expr()->notLike('model', 'A1'), 
     $qb->expr()->notLike('model', 'A2') 
    ) 
    ) 
) 
); 

Вы можете пойти с дикими вложенности выражений до тех пор, как вы читаете docs

Позвольте мне знать, если вам нужна помощь :)

+0

Привет, хороший запрос, но плохой результат: результат не получен – pietro

+0

попытайтесь распечатать запрос и посмотреть, что он производит с помощью этой команды $ qb - >> getSql(); – pcm

+0

Как говорят Matteo, я думаю, что проблема в статусе, а не в статусе, я не знаю, как написать это – pietro

Смежные вопросы