如何将数组传递给 where 条件?

How to pass array into the where condition?

我有动态where条件。它们由以下数组组成:

array:2 [
  "brand_name" => array:2 [
    0 => "a"
    1 => "b"
  ]
  "category_type" => array:1 [
    0 => "AA"
  ]
]

我需要将 where 条件应用于我的查询。

$em = $this->getEntityManager();
$sql = " select * from products as p";

$i = 0;
foreach ($wheres as $key => $value) {
    if ($i === 0) {
        $sql .= " WHERE";
    } else {
        $sql .= " AND";
    }
    $sql.= " te.$key IN (:$key)";
    $i +=1;
}

我不确定如何将值分配给查询。如果我只有 where 条件,我会这样做:

$params = array(
            $ids,
        );
        $query = $em->getConnection()->executeQuery(
            $sql,
            $params,
            array(
                \Doctrine\DBAL\Connection::PARAM_STR_ARRAY,
                \PDO::PARAM_INT,
            )
        );
        $records = $query->fetchAll();

但我不知道如何修复动态条件。

使用查询生成器非常容易。它就是为这种东西而设计的。

像这样的东西会带你去那里:

$qb = $this->createQueryBuilder('p');

$suffix = 0;
foreach ($conditions as $key => $value) {
    $parameter = 'query_' . $suffix++;

    $qb->andWhere("p.$key IN :$parameter")
        ->setParamter($parameter, $value);
}

$records = $qb->getQuery()->getResult()

您需要进行调整以适合您的数据模型。在您的问题中,您正在 selecting products as p,但是您正试图从 te select,所以我猜拼图中缺少一些部分。

不过你应该可以从这里完成它。