diff --git a/src/Database/Barry/Model.php b/src/Database/Barry/Model.php index d41df871..39af76cd 100644 --- a/src/Database/Barry/Model.php +++ b/src/Database/Barry/Model.php @@ -890,10 +890,7 @@ public function __get(string $name): mixed if (!$attribute_exists && method_exists($this, $name)) { $result = $this->$name(); - if ($result instanceof Relation) { - return $result->getResults(); - } - return $result; + return $result instanceof Relation ? $result->getResults() : $result; } if (!$attribute_exists) { @@ -998,23 +995,27 @@ private function executeDataCasting(string $name): mixed } if ($type === "int") { - return (int)$value; + return (int) $value; } if ($type === "float") { - return (float)$value; + return (float) $value; } if ($type === "double") { - return (float)$value; + return (float) $value; + } + + if ($type === "boolean" || $type === "bool") { + return (bool) $value; } if ($type === "json") { if (is_array($value)) { - return (object)$value; + return (object) $value; } if (is_object($value)) { - return (object)$value; + return (object) $value; } return json_decode( $value, diff --git a/src/Database/QueryBuilder.php b/src/Database/QueryBuilder.php index 5b1498c0..e2e657a3 100644 --- a/src/Database/QueryBuilder.php +++ b/src/Database/QueryBuilder.php @@ -291,10 +291,37 @@ private static function isComparisonOperator(mixed $comparator): bool } return in_array(Str::upper($comparator), [ - '=', '>', '<', '>=', '=<', '<>', '!=', 'LIKE', 'NOT', 'IS NOT', "IN", "NOT IN", - 'ILIKE', '&', '|', '<<', '>>', 'NOT LIKE', - '&&', '@>', '<@', '?', '?|', '?&', '||', '-', '@?', '@@', '#-', - 'IS DISTINCT FROM', 'IS NOT DISTINCT FROM', + '=', + '>', + '<', + '>=', + '=<', + '<>', + '!=', + 'LIKE', + 'NOT', + 'IS NOT', + "IN", + "NOT IN", + 'ILIKE', + '&', + '|', + '<<', + '>>', + 'NOT LIKE', + '&&', + '@>', + '<@', + '?', + '?|', + '?&', + '||', + '-', + '@?', + '@@', + '#-', + 'IS DISTINCT FROM', + 'IS NOT DISTINCT FROM', ], true); } @@ -905,6 +932,10 @@ private function bind(PDOStatement $pdo_statement, array $bindings = []): void $param = PDO::PARAM_INT; } elseif (is_resource($value)) { $param = PDO::PARAM_LOB; + } elseif (is_bool($value)) { + $param = PDO::PARAM_BOOL; + } elseif (is_string($value)) { + $param = PDO::PARAM_STR; } $key_binding = is_string($key) ? ":$key" : $key + 1; $pdo_statement->bindValue($key_binding, $value, $param); @@ -920,6 +951,10 @@ private function bind(PDOStatement $pdo_statement, array $bindings = []): void $param = PDO::PARAM_INT; } elseif (is_resource($value)) { $param = PDO::PARAM_LOB; + } elseif (is_bool($value)) { + $param = PDO::PARAM_BOOL; + } elseif (is_string($value)) { + $param = PDO::PARAM_STR; } $pdo_statement->bindValue($i, $value, $param); $i++;