diff --git a/DataStorage/Database/Mapper/DataMapperAbstract.php b/DataStorage/Database/Mapper/DataMapperAbstract.php index 8c09190af..7d53acb83 100644 --- a/DataStorage/Database/Mapper/DataMapperAbstract.php +++ b/DataStorage/Database/Mapper/DataMapperAbstract.php @@ -31,6 +31,8 @@ abstract class DataMapperAbstract protected int $type = 0; + protected int $depth = 1; + protected array $with = []; protected array $sort = []; diff --git a/DataStorage/Database/Mapper/DataMapperFactory.php b/DataStorage/Database/Mapper/DataMapperFactory.php index 79b2ee6af..cffd749a7 100644 --- a/DataStorage/Database/Mapper/DataMapperFactory.php +++ b/DataStorage/Database/Mapper/DataMapperFactory.php @@ -158,6 +158,13 @@ class DataMapperFactory { } + public static function db(ConnectionAbstract $db = null) : string + { + self::$db = $db; + + return static::class; + } + public static function reader(ConnectionAbstract $db = null) : ReadMapper { return new ReadMapper(new static(), $db ?? self::$db); diff --git a/DataStorage/Database/Mapper/DeleteMapper.php b/DataStorage/Database/Mapper/DeleteMapper.php index 2864c7661..23dfd3fdb 100644 --- a/DataStorage/Database/Mapper/DeleteMapper.php +++ b/DataStorage/Database/Mapper/DeleteMapper.php @@ -68,7 +68,7 @@ class DeleteMapper extends DataMapperAbstract private function deleteModel(object $obj, mixed $objId, \ReflectionClass $refClass = null) : void { - $query = new Builder(self::$db); + $query = new Builder($this->db); $query->delete() ->from($this->mapper::TABLE) ->where($this->mapper::TABLE . '.' . $this->mapper::PRIMARYFIELD, '=', $objId); @@ -112,7 +112,7 @@ class DeleteMapper extends DataMapperAbstract } } - $sth = self::$db->con->prepare($query->toSql()); + $sth = $this->db->con->prepare($query->toSql()); if ($sth !== false) { $sth->execute(); } @@ -235,19 +235,19 @@ class DeleteMapper extends DataMapperAbstract { if (empty($objsIds) || $this->mapper::HAS_MANY[$propertyName]['table'] === $this->mapper::TABLE - || $this->mapper::HAS_MANY[$propertyName]['table'] === $this->mapper::HAS_MANY[$propertyName]['mapper']::$table + || $this->mapper::HAS_MANY[$propertyName]['table'] === $this->mapper::HAS_MANY[$propertyName]['mapper']::TABLE ) { return; } foreach ($objsIds as $src) { - $relQuery = new Builder(self::$db); + $relQuery = new Builder($this->db); $relQuery->delete() ->from($this->mapper::HAS_MANY[$propertyName]['table']) ->where($this->mapper::HAS_MANY[$propertyName]['table'] . '.' . $this->mapper::HAS_MANY[$propertyName]['external'], '=', $src) ->where($this->mapper::HAS_MANY[$propertyName]['table'] . '.' . $this->mapper::HAS_MANY[$propertyName]['self'], '=', $objId, 'and'); - $sth = self::$db->con->prepare($relQuery->toSql()); + $sth = $this->db->con->prepare($relQuery->toSql()); if ($sth !== false) { $sth->execute(); } diff --git a/DataStorage/Database/Mapper/ReadMapper.php b/DataStorage/Database/Mapper/ReadMapper.php index 1bf1e7bc7..8c6c61fca 100644 --- a/DataStorage/Database/Mapper/ReadMapper.php +++ b/DataStorage/Database/Mapper/ReadMapper.php @@ -27,7 +27,6 @@ use phpOMS\Utils\ArrayUtils; */ class ReadMapper extends DataMapperAbstract { - private int $depth = 1; private $columns = []; public function get() : self diff --git a/DataStorage/Database/Mapper/UpdateMapper.php b/DataStorage/Database/Mapper/UpdateMapper.php index 64c823f49..c6e10d329 100644 --- a/DataStorage/Database/Mapper/UpdateMapper.php +++ b/DataStorage/Database/Mapper/UpdateMapper.php @@ -81,7 +81,7 @@ class UpdateMapper extends DataMapperAbstract return; } - $query = new Builder(self::$db); + $query = new Builder($this->db); $query->update($this->mapper::TABLE) ->where($this->mapper::TABLE . '.' . $this->mapper::PRIMARYFIELD, '=', $objId); @@ -140,7 +140,7 @@ class UpdateMapper extends DataMapperAbstract } try { - $sth = self::$db->con->prepare($query->toSql()); + $sth = $this->db->con->prepare($query->toSql()); if ($sth !== false) { $sth->execute(); } @@ -236,13 +236,13 @@ class UpdateMapper extends DataMapperAbstract $relMapper->execute($value); - $objsIds[$propertyName][$key] = $value; + $objsIds[$propertyName][$key] = $primaryKey; continue; } // create if not existing - if ($this->mapper::HAS_MANY[$propertyName]['table'] === $this->mapper::HAS_MANY[$propertyName]['mapper']::$table + if ($this->mapper::HAS_MANY[$propertyName]['table'] === $this->mapper::HAS_MANY[$propertyName]['mapper']::TABLE && isset($mapper::COLUMNS[$this->mapper::HAS_MANY[$propertyName]['self']]) ) { $relProperty = $relReflectionClass->getProperty($mapper::COLUMNS[$this->mapper::HAS_MANY[$propertyName]['self']]['internal']); @@ -291,15 +291,15 @@ class UpdateMapper extends DataMapperAbstract $sth->execute(); $result = $sth->fetchAll(\PDO::FETCH_COLUMN); - $removes = \array_diff($result, \array_keys($objsIds[$member] ?? [])); - $adds = \array_diff(\array_keys($objsIds[$member] ?? []), $result); + $removes = \array_diff($result, \array_values($objsIds[$member] ?? [])); + $adds = \array_diff(\array_values($objsIds[$member] ?? []), $result); if (!empty($removes)) { - $this->mapper::remover()->deleteRelationTable($member, $removes, $objId); + $this->mapper::remover(db: $this->db)->deleteRelationTable($member, $removes, $objId); } if (!empty($adds)) { - $this->mapper::writer()->createRelationTable($member, $adds, $objId); + $this->mapper::writer(db: $this->db)->createRelationTable($member, $adds, $objId); } } } diff --git a/DataStorage/Database/Mapper/WriteMapper.php b/DataStorage/Database/Mapper/WriteMapper.php index f05442e8e..b1d434f19 100644 --- a/DataStorage/Database/Mapper/WriteMapper.php +++ b/DataStorage/Database/Mapper/WriteMapper.php @@ -74,7 +74,7 @@ class WriteMapper extends DataMapperAbstract private function createModel(object $obj, \ReflectionClass $refClass) : mixed { - $query = new Builder(self::$db); + $query = new Builder($this->db); $query->into($this->mapper::TABLE); foreach ($this->mapper::COLUMNS as $column) { @@ -128,7 +128,7 @@ class WriteMapper extends DataMapperAbstract } try { - $sth = self::$db->con->prepare($query->toSql()); + $sth = $this->db->con->prepare($query->toSql()); $sth->execute(); } catch (\Throwable $t) { \var_dump($t->getMessage()); @@ -136,7 +136,7 @@ class WriteMapper extends DataMapperAbstract return -1; } - $objId = empty($id = $this->mapper::getObjectId($obj, $refClass)) ? self::$db->con->lastInsertId() : $id; + $objId = empty($id = $this->mapper::getObjectId($obj, $refClass)) ? $this->db->con->lastInsertId() : $id; \settype($objId, $this->mapper::COLUMNS[$this->mapper::PRIMARYFIELD]['type']); return $objId; @@ -313,7 +313,7 @@ class WriteMapper extends DataMapperAbstract return; } - $relQuery = new Builder(self::$db); + $relQuery = new Builder($this->db); $relQuery->into($this->mapper::HAS_MANY[$propertyName]['table']) ->insert($this->mapper::HAS_MANY[$propertyName]['external'], $this->mapper::HAS_MANY[$propertyName]['self']); @@ -331,7 +331,7 @@ class WriteMapper extends DataMapperAbstract } try { - $sth = self::$db->con->prepare($relQuery->toSql()); + $sth = $this->db->con->prepare($relQuery->toSql()); if ($sth !== false) { $sth->execute(); } diff --git a/DataStorage/Database/Query/Builder.php b/DataStorage/Database/Query/Builder.php index 647a002ba..375386528 100644 --- a/DataStorage/Database/Query/Builder.php +++ b/DataStorage/Database/Query/Builder.php @@ -690,7 +690,7 @@ class Builder extends BuilderAbstract */ public function newest(string $column) : self { - $this->orderBy($column, 'DESC'); + $this->orderBy($column, OrderType::DESC); return $this; } @@ -706,7 +706,7 @@ class Builder extends BuilderAbstract */ public function oldest(string $column) : self { - $this->orderBy($column, 'ASC'); + $this->orderBy($column, OrderType::ASC); return $this; } @@ -721,7 +721,7 @@ class Builder extends BuilderAbstract * * @since 1.0.0 */ - public function orderBy(string | array $columns, string | array $order = 'DESC') : self + public function orderBy(string | array $columns, string | array $order = OrderType::DESC) : self { if (\is_string($columns)) { $columns = [$columns];