根据条件在查询中设置参数
Set parameters in the query based on the condition
我需要编写一个包含多个 where
条件和 OR
条件的查询。这个OR
条件只有当$location
数组不为空时才会出现。所以只有当这个数组不为空时才需要参数。
我不知道在这个条件下这个参数条件怎么写。
这是我正在处理的查询。
$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
));
我需要编写一个包含多个 where
条件和 OR
条件的查询。这个OR
条件只有当$location
数组不为空时才会出现。所以只有当这个数组不为空时才需要参数。
我不知道在这个条件下这个参数条件怎么写。
这是我正在处理的查询。
$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
));