Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql QueryBuilder和子条件_Mysql_Symfony_Doctrine Orm - Fatal编程技术网

Mysql QueryBuilder和子条件

Mysql QueryBuilder和子条件,mysql,symfony,doctrine-orm,Mysql,Symfony,Doctrine Orm,您好,我正在尝试使用QueryBuilder和query\Expr构建查询。 我的问题是构建子条件,比如为了得到所有这些条件下的模型列表 状态为真且不在型号名称列表中 状态为假且不在型号名称的其他列表中 代码: public function process(QueryBuilder $qb) { $cond1 = new Expr\Andx; $cond1->add($qb->expr()->eq('status', 0); $cond2= new Ex

您好,我正在尝试使用
QueryBuilder
query\Expr
构建查询。 我的问题是构建子条件,比如为了得到所有这些条件下的模型列表

  • 状态
    且不在
    型号
    名称列表中
  • 状态
    且不在
    型号
    名称的其他列表中
代码:

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

}
感谢您的帮助

$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')
)
)
)
);
你可以疯狂地使用嵌套表达式,只要你阅读

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

感谢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));
    )
);

你需要这些吗?:)是的,这些使查询更具可读性,但从逻辑上讲,它们可能根本不重要…@JovanPerovic:是的,我需要
querybuilder
Expr
。原因:查询是由过滤器集合生成的……对不起,我觉得您需要用
来包装整个查询,我的评论就是关于这个;)你确定你在寻找有地位而没有地位的东西吗?或者元组处于或状态?可能是
状态?因此(308408型新车)或(A1型、A2型二手车)?尝试打印出查询,并查看使用此命令$qb->>getSql()生成的结果;正如Matteo所说,我认为问题在于状态,而不是状态。如果状态字段是布尔值,我不知道如何写这个eq('status',true)。也许可以在这里输入一些实体代码,这样我可以帮助您更新我的答案以满足您的需要。您手中有这些工具,只需要相应地使用它们:)顺便说一句,始终尝试转储原始sql以查看您的表达式生成了什么。