diff --git a/src/Model/Scope/Condition.php b/src/Model/Scope/Condition.php index dd81853e7..9a76cda7d 100644 --- a/src/Model/Scope/Condition.php +++ b/src/Model/Scope/Condition.php @@ -189,12 +189,25 @@ public function toQueryArguments(): array foreach (array_reverse($refModels) as $refModel) { if ($field === '#') { - $field = $value ? $refModel->action('count') : $refModel->action('exists'); + if (is_string($value) && $value === (string) (int) $value) { + $value = (int) $value; + } + + if ($value === 0) { + $field = $refModel->action('exists'); + $value = false; + } elseif ($value === 1 && $operator === self::OPERATOR_GREATER_EQUAL) { + $field = $refModel->action('exists'); + $operator = self::OPERATOR_EQUALS; + $value = true; + } else { + $field = $refModel->action('count'); + } } else { $refModel->addCondition($field, $operator, $value); $field = $refModel->action('exists'); - $operator = '>'; - $value = 0; + $operator = self::OPERATOR_EQUALS; + $value = true; } } } else { diff --git a/src/Persistence/Sql.php b/src/Persistence/Sql.php index 29fc1242e..3e152ac93 100644 --- a/src/Persistence/Sql.php +++ b/src/Persistence/Sql.php @@ -424,9 +424,9 @@ public function _typecastSaveField(Field $field, $value) switch ($field->type) { case 'boolean': - // if enum is not set, then simply cast value to integer + // if enum is not set, then simply cast value to boolean if (!isset($field->enum) || !$field->enum) { - $v = (int) $v; + $v = (bool) $v; break; } diff --git a/tests/PersistentArrayOfStringsTest.php b/tests/PersistentArrayOfStringsTest.php index ffd8fe6e8..e45dabfd1 100644 --- a/tests/PersistentArrayOfStringsTest.php +++ b/tests/PersistentArrayOfStringsTest.php @@ -57,7 +57,7 @@ public function testTypecasting() 'integer' => 123, 'money' => 123.45, 'float' => 123.456789, - 'boolean' => 1, + 'boolean' => true, 'boolean_enum' => 'N', 'date' => '2019-01-20', 'datetime' => '2019-01-20 12:23:34.000000',