protected function RestfulDataProviderDbQuery::queryForListFilter in RESTful 7
Filter the query for list.
Parameters
\SelectQuery $query: The query object.
Throws
See also
\RestfulEntityBase::getQueryForList
2 calls to RestfulDataProviderDbQuery::queryForListFilter()
- RestfulDataProviderDbQuery::getQueryCount in plugins/
restful/ RestfulDataProviderDbQuery.php - Prepare a query for RestfulEntityBase::getTotalCount().
- RestfulDataProviderDbQuery::getQueryForList in plugins/
restful/ RestfulDataProviderDbQuery.php - Prepare a query for RestfulEntityBase::getList().
File
- plugins/
restful/ RestfulDataProviderDbQuery.php, line 196 - Contains \RestfulDataProviderDbQuery
Class
- RestfulDataProviderDbQuery
- @file Contains \RestfulDataProviderDbQuery
Code
protected function queryForListFilter(\SelectQuery $query) {
$public_fields = $this
->getPublicFields();
foreach ($this
->parseRequestForListFilter() as $filter) {
if (in_array(strtoupper($filter['operator'][0]), array(
'IN',
'NOT IN',
'BETWEEN',
))) {
$column_name = $this
->getPropertyColumnForQuery($public_fields[$filter['public_field']]);
if (is_array($filter['value']) && empty($filter['value'])) {
if (strtoupper($filter['operator'][0]) == 'NOT IN') {
// Skip filtering by an empty value when operator is 'NOT IN',
// since it throws an SQL error.
continue;
}
// Since Drupal doesn't know how to handle an empty array within a
// condition we add the `NULL` as an element to the array.
$filter['value'] = array(
NULL,
);
}
$query
->condition($column_name, $filter['value'], $filter['operator'][0]);
continue;
}
$condition = db_condition($filter['conjunction']);
for ($index = 0; $index < count($filter['value']); $index++) {
$column_name = $this
->getPropertyColumnForQuery($public_fields[$filter['public_field']]);
$condition
->condition($column_name, $filter['value'][$index], $filter['operator'][$index]);
}
$query
->condition($condition);
}
}