Handle null in API filter (closes #1173)

This commit is contained in:
Bernd Bestel
2020-12-11 19:32:08 +01:00
parent 24c9f31caf
commit 51a95814e0

View File

@@ -87,13 +87,23 @@ class BaseApiController extends BaseController
$q, $q,
$matches $matches
); );
error_log(var_export($matches, true));
if (!array_key_exists('field', $matches) || !array_key_exists('op', $matches) || !array_key_exists('value', $matches))
{
throw new \Exception('Invalid query');
}
if (strtolower($matches['value']) == 'null')
{
$matches['value'] = '';
}
switch ($matches['op']) { switch ($matches['op']) {
case '=': case '=':
$data = $data->where($matches['field'], $matches['value']); $data = $data->where('IFNULL(' . $matches['field'] . ', \'\') = ?', $matches['value']);
break; break;
case '!=': case '!=':
$data = $data->whereNot($matches['field'], $matches['value']); $data = $data->where('IFNULL(' . $matches['field'] . ', \'\') != ?', $matches['value']);
break; break;
case '~': case '~':
$data = $data->where($matches['field'] . ' LIKE ?', '%' . $matches['value'] . '%'); $data = $data->where($matches['field'] . ' LIKE ?', '%' . $matches['value'] . '%');
@@ -101,25 +111,22 @@ class BaseApiController extends BaseController
case '!~': case '!~':
$data = $data->where($matches['field'] . ' NOT LIKE ?', '%' . $matches['value'] . '%'); $data = $data->where($matches['field'] . ' NOT LIKE ?', '%' . $matches['value'] . '%');
break; break;
case '!>=':
case '<': case '<':
$data = $data->where($matches['field'] . ' < ?', $matches['value']); $data = $data->where($matches['field'] . ' < ?', $matches['value']);
break; break;
case '!<=':
case '>': case '>':
$data = $data->where($matches['field'] . ' > ?', $matches['value']); $data = $data->where($matches['field'] . ' > ?', $matches['value']);
break; break;
case '!<':
case '>=': case '>=':
$data = $data->where($matches['field'] . ' >= ?', $matches['value']); $data = $data->where($matches['field'] . ' >= ?', $matches['value']);
break; break;
case '!>':
case '<=': case '<=':
$data = $data->where($matches['field'] . ' <= ?', $matches['value']); $data = $data->where($matches['field'] . ' <= ?', $matches['value']);
break; break;
} }
} }
return $data; return $data;
} }