From c9c6a11ebdcf9c8fa2f5efa58af399047566d0dc Mon Sep 17 00:00:00 2001 From: Dave Mc Nicoll Date: Wed, 8 Feb 2023 16:37:48 +0000 Subject: [PATCH] - Fixed a bug caused by the addition of Attributes (on Ignore tags) and ajusted the EntityTrait with it --- src/Common/EntityResolver.php | 2 +- src/EntityTrait.php | 35 +++++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/src/Common/EntityResolver.php b/src/Common/EntityResolver.php index 55cd2b5..ed1a0e0 100644 --- a/src/Common/EntityResolver.php +++ b/src/Common/EntityResolver.php @@ -76,7 +76,7 @@ class EntityResolver { public function fieldList($fieldKey = self::KEY_ENTITY_NAME, bool $skipVirtual = false) : array { $fieldList = []; - + foreach($this->properties as $item) { foreach($item['tags'] ?? [] as $tag) { if ( $tag['object'] instanceof Field or $tag['object'] instanceof Attribute\Property\Field ) { diff --git a/src/EntityTrait.php b/src/EntityTrait.php index 7b3599f..6fd97fd 100644 --- a/src/EntityTrait.php +++ b/src/EntityTrait.php @@ -2,6 +2,7 @@ namespace Ulmus; +use Notes\Attribute\Ignore; use Ulmus\{ Repository, Query, Common\EntityResolver, Common\EntityField }; use Ulmus\Annotation\Classes\{ Method, Table, Collation, }; use Ulmus\Annotation\Property\{ Field, Filter, FilterJoin, Relation, OrderBy, Where, OrWhere, Join, Virtual, On, WithJoin, }; @@ -11,28 +12,21 @@ use Ulmus\Annotation\Property\Relation\{ Ignore as RelationIgnore }; trait EntityTrait { use EventTrait; - /** - * @Ignore - */ + #[Ignore] protected bool $entityStrictFieldsDeclaration = false; - /** - * @Ignore - */ + #[Ignore] protected array $entityDatasetUnmatchedFields = []; - /** - * @Ignore - */ + #[Ignore] public array $entityLoadedDataset = []; + #[Ignore] public function __construct() { $this->resetVirtualProperties(); } - /**entityLoadedDataset - * @Ignore - */ + #[Ignore] public function entityFillFromDataset(iterable $dataset, bool $overwriteDataset = false) : self { $loaded = $this->isLoaded(); @@ -110,6 +104,7 @@ trait EntityTrait { return $this; } + #[Ignore] public function resetVirtualProperties() : self { foreach($this->resolveEntity()->properties as $prop => $property) { @@ -125,6 +120,7 @@ trait EntityTrait { return $this; } + #[Ignore] public function fromArray(iterable $dataset) : self { return $this->entityFillFromDataset($dataset); @@ -178,6 +174,7 @@ trait EntityTrait { return $dataset; } + #[Ignore] public function toArray($includeRelations = false, array $filterFields = null) : array { $dataset = $this->entityGetDataset($includeRelations); @@ -185,11 +182,13 @@ trait EntityTrait { return $filterFields ? array_intersect_key($dataset, array_flip($filterFields)) : $dataset; } + #[Ignore] public function toCollection() : EntityCollection { return static::entityCollection([ $this ]); } + #[Ignore] public function isLoaded() : bool { if (empty($this->entityLoadedDataset)) { @@ -205,6 +204,7 @@ trait EntityTrait { return isset($this->$key); } + #[Ignore] public function __get(string $name) { $relation = new Repository\RelationBuilder($this); @@ -216,6 +216,7 @@ trait EntityTrait { throw new \Exception(sprintf("[%s] - Undefined variable: %s", static::class, $name)); } + #[Ignore] public function __isset(string $name) : bool { #if ( null !== $relation = static::resolveEntity()->searchFieldAnnotation($name, new Relation() ) ) { @@ -230,16 +231,19 @@ trait EntityTrait { return isset($this->$name); } + #[Ignore] public function __sleep() { return array_merge(array_keys($this->resolveEntity()->fieldList()), [ 'entityLoadedDataset' ] ); } + #[Ignore] public function __wakeup() { $this->resetVirtualProperties(); } + #[Ignore] public function __clone() { foreach($this as $prop) { @@ -253,21 +257,25 @@ trait EntityTrait { } } + #[Ignore] public function jsonSerialize() : mixed { return $this->entityGetDataset(); } + #[Ignore] public static function resolveEntity() : EntityResolver { return Ulmus::resolveEntity(static::class); } + #[Ignore] public static function repository(string $alias = Repository::DEFAULT_ALIAS, ConnectionAdapter $adapter = null) : Repository { return Ulmus::repository(static::class, $alias, $adapter); } + #[Ignore] public static function entityCollection(...$arguments) : EntityCollection { $collection = new EntityCollection(...$arguments); @@ -276,16 +284,19 @@ trait EntityTrait { return $collection; } + #[Ignore] public static function queryBuilder() : QueryBuilder { return Ulmus::queryBuilder(static::class); } + #[Ignore] public static function field($name, ? string $alias = Repository::DEFAULT_ALIAS) : EntityField { return new EntityField(static::class, $name, $alias ? Ulmus::repository(static::class)->adapter->adapter()->escapeIdentifier($alias, Adapter\AdapterInterface::IDENTIFIER_FIELD) : Repository::DEFAULT_ALIAS, Ulmus::resolveEntity(static::class)); } + #[Ignore] public static function fields(array $fields, ? string $alias = Repository::DEFAULT_ALIAS) : string { return implode(', ', array_map(function($item) use ($alias){