猿问

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

我需要编写一个具有多个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"],

        ));


一只萌萌小番薯
浏览 100回答 2
2回答

白衣非少年

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"]);}

慕神8447489

您可以创建包含条件参数的 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));
随时随地看视频慕课网APP
我要回答