我有动态条件。它们由以下数组组成:
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;
}
我不确定如何将值分配给查询。如果我有单身条件,我会做这样的事情:
$params = array(
$ids,
);
$query = $em->getConnection()->executeQuery(
$sql,
$params,
array(
DoctrineDBALConnection::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()
您需要进行调整以适合您的数据模型。在您的问题中,您正在选择products as p
,但随后您正在尝试从te
中进行选择,所以我想拼图中缺少一些碎片。
但是您应该能够从这里完成它。