如何将数组传递给 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,所以我猜拼图中缺少一些部分。
不过你应该可以从这里完成它。
我有动态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,所以我猜拼图中缺少一些部分。
不过你应该可以从这里完成它。