Php 根据条件设置查询中的参数

Php 根据条件设置查询中的参数,php,symfony,doctrine-orm,query-builder,Php,Symfony,Doctrine Orm,Query Builder,我需要编写一个带有多个where条件和OR条件的查询。仅当$location数组不为空时,才出现此OR条件。因此,仅当此数组不为空时才需要参数 我不知道如何在此条件下写入此参数条件 这就是我正在研究的问题 $qb = $this->createQueryBuilder("e") ->select( "e.vehicleId", "e.schemaId", "e

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

我不知道如何在此条件下写入此参数条件

这就是我正在研究的问题

$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有两种方法来设置查询参数

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"];
}
您正在使用的setParametersarray$parameters和更简单的setParameterName$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"]);
}
QueryBuilder有两种方法来设置查询参数

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"];
}
您正在使用的setParametersarray$parameters和更简单的setParameterName$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"]);
}

可以创建包含条件参数的参数数组

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
));

可以创建包含条件参数的参数数组

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
));