aboutsummaryrefslogtreecommitdiffstats
path: root/core/namespace/ORM/Repository.php
diff options
context:
space:
mode:
Diffstat (limited to 'core/namespace/ORM/Repository.php')
-rw-r--r--core/namespace/ORM/Repository.php68
1 files changed, 31 insertions, 37 deletions
diff --git a/core/namespace/ORM/Repository.php b/core/namespace/ORM/Repository.php
index c0677a9..a1efa3c 100644
--- a/core/namespace/ORM/Repository.php
+++ b/core/namespace/ORM/Repository.php
@@ -1,6 +1,7 @@
<?php
namespace ORM;
use Database;
+use PDOStatement;
abstract class Repository {
protected $Database;
@@ -14,6 +15,30 @@ abstract class Repository {
}
#===============================================================================
+ # Fetch entity from a PDOStatement result
+ #===============================================================================
+ protected function fetchEntity(PDOStatement $Statement): ?EntityInterface {
+ if($Entity = $Statement->fetchObject(static::getClassName())) {
+ $this->storeInstance($Entity->getID(), $Entity);
+ return $Entity;
+ }
+
+ return NULL;
+ }
+
+ #===============================================================================
+ # Fetch multiple entities from a PDOStatement result
+ #===============================================================================
+ protected function fetchEntities(PDOStatement $Statement): array {
+ if($entities = $Statement->fetchAll($this->Database::FETCH_CLASS, static::getClassName())) {
+ $this->storeMultipleInstances($entities);
+ return $entities;
+ }
+
+ return [];
+ }
+
+ #===============================================================================
# Adds an entity to the runtime cache
#===============================================================================
protected function storeInstance(int $identifier, EntityInterface $Entity) {
@@ -119,12 +144,7 @@ abstract class Repository {
$Statement = $this->Database->prepare($query);
$Statement->execute([$value]);
- if($Entity = $Statement->fetchObject(static::getClassName())) {
- $this->storeInstance($Entity->getID(), $Entity);
- return $Entity;
- }
-
- return NULL;
+ return $this->fetchEntity($Statement);
}
#===============================================================================
@@ -137,12 +157,7 @@ abstract class Repository {
$Statement = $this->Database->prepare($query);
$Statement->execute([$Entity->get('time_insert')]);
- if($Entity = $Statement->fetchObject(static::getClassName())) {
- $this->storeInstance($Entity->getID(), $Entity);
- return $Entity;
- }
-
- return NULL;
+ return $this->fetchEntity($Statement);
}
#===============================================================================
@@ -155,12 +170,7 @@ abstract class Repository {
$Statement = $this->Database->prepare($query);
$Statement->execute([$Entity->get('time_insert')]);
- if($Entity = $Statement->fetchObject(static::getClassName())) {
- $this->storeInstance($Entity->getID(), $Entity);
- return $Entity;
- }
-
- return NULL;
+ return $this->fetchEntity($Statement);
}
#===========================================================================
@@ -171,13 +181,7 @@ abstract class Repository {
$query = sprintf($query, static::getTableName());
$Statement = $this->Database->query($query);
-
- if($Entity = $Statement->fetchObject(static::getClassName())) {
- $this->storeInstance($Entity->getID(), $Entity);
- return $Entity;
- }
-
- return NULL;
+ return $this->fetchEntity($Statement);
}
#===========================================================================
@@ -251,12 +255,7 @@ abstract class Repository {
$Statement = $this->Database->prepare($query);
$Statement->execute($params);
- if($entities = $Statement->fetchAll($this->Database::FETCH_CLASS, static::getClassName())) {
- $this->storeMultipleInstances($entities);
- return $entities;
- }
-
- return [];
+ return $this->fetchEntities($Statement);
}
#===============================================================================
@@ -291,12 +290,7 @@ abstract class Repository {
$Statement = $this->Database->prepare($query);
$Statement->execute(array_merge($params ?? [], [$search]));
- if($entities = $Statement->fetchAll($this->Database::FETCH_CLASS, static::getClassName())) {
- $this->storeMultipleInstances($entities);
- return $entities;
- }
-
- return [];
+ return $this->fetchEntities($Statement);
}
#===============================================================================