whereOr adds IS NULL AND FALSE to the end of query when parameter is not associative array
matXias opened this issue · 1 comments
matXias commented
Version: 3.1.4
Sending array parameter without keys to whereOr
function returns imploded query with IS NULL AND FALSE
Example:
$table->whereOr(['DATE(...) < DATE(NOW())', 'DATE(...) >= DATE(NOW())])
variable $values is default [] in whereOr
function and after final imploding send this query to where function like:
->where('DATE(...) < DATE(NOW()) OR DATE(...) >= DATE(NOW())', []);
and this is problem, because where
with second parameter as empty array add IS NULL...
$values = [];
...
if (is_int($key)) { // whereOr(['full condition'])
$columns[] = $val;
...
$columnsString = '(' . implode(') OR (', $columns) . ')';
return $this->where($columnsString, $values);
DOCUMENTATION:
doc
$table->where('id', []); // id IS NULL AND FALSE
expected behavior is
// WHERE (user_id IS NULL) OR (SUM(`field1`) > SUM(`field2`))
$table->whereOr([
'user_id IS NULL',
'SUM(field1) > SUM(field2)',
]);
KminekMatej commented
Problem sitll persists in nette/database 3.2.1
$table->whereOr([
'user_id IS NULL',
'SUM(field1) > SUM(field2)',
]);
generates query:
SELECT * FROM `table` WHERE ((`user_id` IS NULL) OR (SUM(`field1`) > SUM(`field2`)) IS NULL AND FALSE)