QueryBuilder和子条件

时间:2015-04-29 09:16:09

标签: mysql symfony doctrine-orm

您好我想使用QueryBuilderQuery\Expr构建查询。 我的问题是构建子条件,以便获得所有这些条件的模型列表?

  • Statustrue,不在model名称
  • 列表中
  • Statusfalse,而不是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

}

感谢您的帮助

2 个答案:

答案 0 :(得分: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,就可以使用嵌套表达式

如果您需要帮助,请告诉我们。)

答案 1 :(得分: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));
    )
);