具有多个值的参数的学说查询
doctrine query with parameters having multiple values
我想进行一个学说查询,其中每个参数都可以有多个值(来自 select 倍数)。
我有一个 table,其 'type' 参数的值为 1、2、3 或 4,'online' 参数的值为 0 或 1。
到目前为止我的查询如下:
$query = $this->createQueryBuilder('properties');
if (array_key_exists('type', $searchValues)) {
$types = $searchValues['type'];
$iterator = 0;
foreach ($types as $type) {
if ($iterator == 0) {
$query->andWhere('properties.idPropertyType = ' . $type);
} else {
$query->orWhere('properties.onlineProperties = ' . $type);
}
$iterator++;
}
}
if (array_key_exists('status', $searchValues)) {
$status = $searchValues['status'];
$iterator = 0;
foreach ($status as $statu) {
if ($iterator == 0) {
$query->andwhere('properties.onlineProperties = ' . $statu);
} else {
$query->andWhere('properties.onlineProperties = ' . $statu);
}
$iterator++;
}
}
$properties = $query->getQuery()->getResult();
在搜索参数类型 = 1 和在线 = 0 和 1 的情况下,我得到的结果是类型不是 1 的另一个值。我理解原因,但我无法找到正确的方法来使我的查询。
您无需手动构建查询,只需使用 QueryBuilder class 中的 (in) 函数即可。试试这个:
$query = $this->createQueryBuilder('properties');
if(array_key_exists('type', $searchValues)){
$types = $searchValues['type'];
$query->andWhere($query->expr()->in('properties.idPropertyType', $types));
}
if(array_key_exists('status', $searchValues)){
$status = $searchValues['status'];
$query->andwhere($query->expr()->in('properties.onlineProperties', $status));
}
$properties = $query->getQuery()->getResult();
我想进行一个学说查询,其中每个参数都可以有多个值(来自 select 倍数)。
我有一个 table,其 'type' 参数的值为 1、2、3 或 4,'online' 参数的值为 0 或 1。
到目前为止我的查询如下:
$query = $this->createQueryBuilder('properties');
if (array_key_exists('type', $searchValues)) {
$types = $searchValues['type'];
$iterator = 0;
foreach ($types as $type) {
if ($iterator == 0) {
$query->andWhere('properties.idPropertyType = ' . $type);
} else {
$query->orWhere('properties.onlineProperties = ' . $type);
}
$iterator++;
}
}
if (array_key_exists('status', $searchValues)) {
$status = $searchValues['status'];
$iterator = 0;
foreach ($status as $statu) {
if ($iterator == 0) {
$query->andwhere('properties.onlineProperties = ' . $statu);
} else {
$query->andWhere('properties.onlineProperties = ' . $statu);
}
$iterator++;
}
}
$properties = $query->getQuery()->getResult();
在搜索参数类型 = 1 和在线 = 0 和 1 的情况下,我得到的结果是类型不是 1 的另一个值。我理解原因,但我无法找到正确的方法来使我的查询。
您无需手动构建查询,只需使用 QueryBuilder class 中的 (in) 函数即可。试试这个:
$query = $this->createQueryBuilder('properties');
if(array_key_exists('type', $searchValues)){
$types = $searchValues['type'];
$query->andWhere($query->expr()->in('properties.idPropertyType', $types));
}
if(array_key_exists('status', $searchValues)){
$status = $searchValues['status'];
$query->andwhere($query->expr()->in('properties.onlineProperties', $status));
}
$properties = $query->getQuery()->getResult();