根据条件在查询中设置参数



我需要编写一个具有多个where条件和OR条件的查询。仅当数组不为空时$locationOR条件。因此,仅当此数组不为空时才需要参数。

我不确定在这种情况下如何编写此参数条件。

这是我正在处理的查询。

$qb = $this->createQueryBuilder("e")
->select(
"e.vehicleId",
"e.schemaId",
"e.location",
)
->andWhere("e.vehicleId = :vehicleId")
->andWhere("e.optionId = :optionId")
->andWhere("e.schemaId = :schemaId");
if (count($position) > 0) {
$qb->andWhere($qb->expr()->orX(
$qb->expr()->andX("e.location = :location"),
$qb->expr()->andX("e.location = :loc")
));
}
$qb->setParameters(array(
"vehicleId" => $vehicleId,
"schemaId" => $schemaId,
"location" => $position["location"],
"loc" => $position["loc"],
));

QueryBuilder有两种方法来设置查询参数。

您正在使用的那个(setParameters(array $parameters),以及更简单的setParameter($parameterName, $parameterValue)

使用后者而不是您正在使用的参数,您可以在需要的地方设置参数:

if (count($position) > 0) {
$qb->andWhere($qb->expr()->orX(
$qb->expr()->andX("e.location = :location"),
$qb->expr()->andX("e.location = :loc")
))
->setParameter('location', $position["location"])
->setParameter('loc', $position["loc"]);
}

您可以创建包含条件参数的参数化 parameteR 数组。

if (count($position) > 0) {
$qb->andWhere($qb->expr()->orX(
$qb->expr()->andX("e.location = :location"),
$qb->expr()->andX("e.location = :loc")
));
$parameter["location"] = $position["location"];
$parameter["loc"] = $position["loc"];
}

然后将此参数数组传递并合并到 setParameters 方法中。

$qb->setParameters(array_merge(
array(
"vehicleId" => $vehicleId,
"schemaId" => $schemaId,
),
$parameters
));

相关内容

  • 没有找到相关文章

最新更新