From f3712c9cc77ac7b0d8c806a8b7c5babbfab70813 Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Thu, 13 Apr 2023 15:39:16 -0400 Subject: [PATCH] - Changed returned object from PdoObject runQuery method correcting 'Creation of dynamic property PDOStatement:: is deprecated' --- src/Annotation/Property/Where.php | 2 +- src/Common/EntityResolver.php | 2 +- src/Common/PdoObject.php | 27 +++++++++++++++------------ src/EntityTrait.php | 2 +- src/Repository.php | 16 ++++++++-------- src/Repository/RelationBuilder.php | 2 +- 6 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/Annotation/Property/Where.php b/src/Annotation/Property/Where.php index 67085e4..a712a43 100644 --- a/src/Annotation/Property/Where.php +++ b/src/Annotation/Property/Where.php @@ -27,4 +27,4 @@ class Where implements \Notes\Annotation { $this->operator = $operator !== null ? $operator : Query\Where::OPERATOR_EQUAL; $this->condition = $condition !== null ? $condition : Query\Where::CONDITION_AND; } -} +} diff --git a/src/Common/EntityResolver.php b/src/Common/EntityResolver.php index ed1a0e0..3f4d00f 100644 --- a/src/Common/EntityResolver.php +++ b/src/Common/EntityResolver.php @@ -252,7 +252,7 @@ class EntityResolver { protected function getTableAttribute() { - return $this->getAnnotationFromClassname(Attribute\Obj\Table::class, false) ?: $this->getAnnotationFromClassname( Table::class ); + return $this->getAnnotationFromClassname(Attribute\Obj\Table::class, false) ?: $this->getAnnotationFromClassname( Table::class, false ); } /** diff --git a/src/Common/PdoObject.php b/src/Common/PdoObject.php index 3a85cfd..94e5d76 100644 --- a/src/Common/PdoObject.php +++ b/src/Common/PdoObject.php @@ -11,14 +11,18 @@ class PdoObject extends PDO { public bool $executionStatus; - public function select(string $sql, array $parameters = []): PDOStatement + public int $rowCount = 0; + + public mixed $lastInsertId = null; + + public function select(string $sql, array $parameters = []): PDOStatement { static::$dump && call_user_func_array(static::$dump, [ $sql, $parameters ]); try { if (false !== ( $statement = $this->prepare($sql) )) { - $statement = $this->execute($statement, $parameters, false); $statement->setFetchMode(\PDO::FETCH_ASSOC); + $this->execute($statement, $parameters, false); return $statement; } @@ -28,10 +32,7 @@ class PdoObject extends PDO { } } - /** - * @deprecated - */ - public function runQuery(string $sql, array $parameters = []): ? PDOStatement + public function runQuery(string $sql, array $parameters = []): ? static { static::$dump && call_user_func_array(static::$dump, [ $sql, $parameters ]); @@ -47,24 +48,25 @@ class PdoObject extends PDO { return null; } - public function runInsertQuery(string $sql, array $parameters = []) + public function runInsertQuery(string $sql, array $parameters = []) : ? static { return $this->runQuery($sql, $parameters); } - public function runUpdateQuery(string $sql, array $parameters = []) + public function runUpdateQuery(string $sql, array $parameters = []) : ? static { return $this->runQuery($sql, $parameters); } - public function runDeleteQuery(string $sql, array $parameters = []): ? PDOStatement + public function runDeleteQuery(string $sql, array $parameters = []) : ? static { return $this->runQuery($sql, $parameters); } - public function execute(PDOStatement $statement, array $parameters = [], bool $commit = true): ? PDOStatement + public function execute(PDOStatement $statement, array $parameters = [], bool $commit = true) : ? static { $this->executionStatus = false; + $this->lastInsertId = null; try { if ( ! $this->inTransaction() ) { @@ -74,13 +76,14 @@ class PdoObject extends PDO { $this->executionStatus = empty($parameters) ? $statement->execute() : $statement->execute($parameters); if ( $this->executionStatus ) { - $statement->lastInsertId = $this->lastInsertId(); + $this->lastInsertId = $this->lastInsertId(); + $this->rowCount = $statement->rowCount(); if ( $commit ) { $this->commit(); } - return $statement; + return $this; } else { throw new \PDOException($statement->errorCode() . " - " . json_encode($statement->errorInfo())); diff --git a/src/EntityTrait.php b/src/EntityTrait.php index ef1bf56..c94f77b 100644 --- a/src/EntityTrait.php +++ b/src/EntityTrait.php @@ -57,7 +57,7 @@ trait EntityTrait { $data = json_decode($value, true); if (json_last_error() !== \JSON_ERROR_NONE) { - throw new \Exception(sprintf("JSON error while decoding in EntityTrait : '%s' given %s", json_last_error_msg(), $value)); + throw new \Exception(sprintf("JSON error while decoding in EntityTrait : '%s' given %s with field %s", json_last_error_msg(), $value, json_encode($field))); } $this->{$field['name']} = $data; diff --git a/src/Repository.php b/src/Repository.php index 1f19b63..ade56d9 100644 --- a/src/Repository.php +++ b/src/Repository.php @@ -51,7 +51,7 @@ class Repository public function loadOne() : ? object { - return $this->limit(1)->selectSqlQuery()->collectionFromQuery()[0]; + return $this->limit(1)->selectSqlQuery()->collectionFromQuery()[0] ?? null; } public function loadOneFromField($field, $value) : ? object @@ -113,7 +113,7 @@ class Repository throw new Exception\EntityPrimaryKeyUnknown("A primary key value has to be defined to delete an item."); } - return (bool) $this->wherePrimaryKey($value)->deleteOne()->rowCount(); + return (bool) $this->wherePrimaryKey($value)->deleteOne()->rowCount; } public function destroy(object $entity) : bool @@ -160,13 +160,13 @@ class Repository if ( $replace || ! $entity->isLoaded() ) { # $dataset = array_filter($dataset, fn($item, $field) => ! ($this->entityResolver->searchFieldAnnotation($field, new Field, false)->readonly ?? false), \ARRAY_FILTER_USE_BOTH); - $statement = $this->insertSqlQuery($fieldsAndValue ?? $dataset, $replace)->runInsertQuery(); + $pdoObject = $this->insertSqlQuery($fieldsAndValue ?? $dataset, $replace)->runInsertQuery(); if ( null !== $primaryKeyDefinition ) { $pkField = key($primaryKeyDefinition); - if ($statement->lastInsertId ) { - $dataset[$pkField] = $statement->lastInsertId; + if ($pdoObject->lastInsertId ) { + $dataset[$pkField] = $pdoObject->lastInsertId; } elseif ($replace) { $pkValue = $dataset[$pkField]; @@ -175,7 +175,7 @@ class Repository $entity->entityFillFromDataset($dataset, true); - return (bool) ($pkValue ?? $statement->lastInsertId); + return (bool) ( $pkValue ?? $pdoObject->lastInsertId ); } else { if ( $primaryKeyDefinition === null ) { @@ -193,7 +193,7 @@ class Repository $entity->entityFillFromDataset($dataset, true); - return $update ? (bool) $update->rowCount() : false; + return $update ? (bool) $update->rowCount : false; } } @@ -262,7 +262,7 @@ class Repository $entity->entityFillFromDataset($dataset, true); - return $update ? (bool) $update->rowCount() : false; + return $update ? (bool) $update->rowCount : false; } } } diff --git a/src/Repository/RelationBuilder.php b/src/Repository/RelationBuilder.php index 5202053..992c513 100644 --- a/src/Repository/RelationBuilder.php +++ b/src/Repository/RelationBuilder.php @@ -116,7 +116,7 @@ class RelationBuilder $this->entity->eventExecute(Event\EntityRelationLoadInterface::class, $name, $this->repository); - $results = call_user_func([ $this->repository, $relationRelation->function() ]); + $results = call_user_func([ $this->repository, 'loadAll' ]); if ($relation->bridgeField ?? false) { $collection = $relation->bridge::entityCollection();