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以查看您的表达式生成了什么。