嗨,我想使用 QueryBuilder
和 QueryExpr
构建查询。我的问题是构建子条件,例如为了获得所有这些条件的模型列表?
-
Status
true
且不在model
名称列表中 -
Status
false
,而不是在其他model
名称列表中
法典:
public function process(QueryBuilder $qb)
{
$cond1 = new ExprAndx;
$cond1->add($qb->expr()->eq('status', 0);
$cond2= new ExprAndx;
$cond2->add($qb->expr()->notIn('model', array('308','408'));
$cond1->add($cond2);
$cond3 = new ExprAndx;
$cond3->add($qb->expr()->eq('status', 1);
$cond4= new ExprAndx;
$cond4->add($qb->expr()->notIn('model', array('A1','A2'));
$cond3->add($cond4);
$qb->andWhere($cond1);
$qb->andWhere($cond3);
}
类模型
Class Vehicle{
/**
* @var string
*
* @ORMColumn(name="model", type="string", length=255, nullable=true)
*/
private $modele;
/**
* @var string
*
* @ORMColumn(name="make", type="string", length=255, nullable=true)
*/
private $make;
/**
* @var boolean (status for vehicule 1 = Used vehicle)
*
* @ORMColumn(name="status", type="boolean")
* @SerializerGroups({"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));
)
);