Upgrade to 3.9.7
This commit is contained in:
@@ -3,9 +3,10 @@
|
||||
namespace Kirby\Database;
|
||||
|
||||
use Closure;
|
||||
use Exception;
|
||||
use Kirby\Exception\InvalidArgumentException;
|
||||
use Kirby\Toolkit\A;
|
||||
use Kirby\Toolkit\Collection;
|
||||
use Kirby\Toolkit\Obj;
|
||||
use Kirby\Toolkit\Str;
|
||||
use PDO;
|
||||
use PDOStatement;
|
||||
@@ -337,13 +338,16 @@ class Database
|
||||
/**
|
||||
* Executes a sql query, which is expected to return a set of results
|
||||
*/
|
||||
public function query(string $query, array $bindings = [], array $params = [])
|
||||
{
|
||||
public function query(
|
||||
string $query,
|
||||
array $bindings = [],
|
||||
array $params = []
|
||||
) {
|
||||
$defaults = [
|
||||
'flag' => null,
|
||||
'method' => 'fetchAll',
|
||||
'fetch' => 'Kirby\Toolkit\Obj',
|
||||
'iterator' => 'Kirby\Toolkit\Collection',
|
||||
'fetch' => Obj::class,
|
||||
'iterator' => Collection::class,
|
||||
];
|
||||
|
||||
$options = array_merge($defaults, $params);
|
||||
@@ -359,7 +363,7 @@ class Database
|
||||
) {
|
||||
$flags = PDO::FETCH_ASSOC;
|
||||
} else {
|
||||
$flags = PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE;
|
||||
$flags = PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE;
|
||||
}
|
||||
|
||||
// add optional flags
|
||||
@@ -368,7 +372,10 @@ class Database
|
||||
}
|
||||
|
||||
// set the fetch mode
|
||||
if ($options['fetch'] instanceof Closure || $options['fetch'] === 'array') {
|
||||
if (
|
||||
$options['fetch'] instanceof Closure ||
|
||||
$options['fetch'] === 'array'
|
||||
) {
|
||||
$this->statement->setFetchMode($flags);
|
||||
} else {
|
||||
$this->statement->setFetchMode($flags, $options['fetch']);
|
||||
@@ -379,8 +386,14 @@ class Database
|
||||
|
||||
// apply the fetch closure to all results if given
|
||||
if ($options['fetch'] instanceof Closure) {
|
||||
foreach ($results as $key => $result) {
|
||||
$results[$key] = $options['fetch']($result, $key);
|
||||
if ($options['method'] === 'fetchAll') {
|
||||
// fetching multiple records
|
||||
foreach ($results as $key => $result) {
|
||||
$results[$key] = $options['fetch']($result, $key);
|
||||
}
|
||||
} elseif ($options['method'] === 'fetch' && $results !== false) {
|
||||
// fetching a single record
|
||||
$results = $options['fetch']($results, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -189,8 +189,12 @@ class Query
|
||||
*
|
||||
* @return $this
|
||||
*/
|
||||
public function fetch(string|Closure $fetch): static
|
||||
public function fetch(string|callable|Closure $fetch): static
|
||||
{
|
||||
if (is_callable($fetch) === true) {
|
||||
$fetch = Closure::fromCallable($fetch);
|
||||
}
|
||||
|
||||
$this->fetch = $fetch;
|
||||
return $this;
|
||||
}
|
||||
@@ -623,7 +627,7 @@ class Query
|
||||
/**
|
||||
* Selects only one row from a table
|
||||
*/
|
||||
public function first(): object|array|false
|
||||
public function first(): mixed
|
||||
{
|
||||
return $this->query($this->offset(0)->limit(1)->build('select'), [
|
||||
'fetch' => $this->fetch,
|
||||
@@ -635,7 +639,7 @@ class Query
|
||||
/**
|
||||
* Selects only one row from a table
|
||||
*/
|
||||
public function row(): object|array|false
|
||||
public function row(): mixed
|
||||
{
|
||||
return $this->first();
|
||||
}
|
||||
@@ -643,7 +647,7 @@ class Query
|
||||
/**
|
||||
* Selects only one row from a table
|
||||
*/
|
||||
public function one(): object|array|false
|
||||
public function one(): mixed
|
||||
{
|
||||
return $this->first();
|
||||
}
|
||||
|
Reference in New Issue
Block a user