From 1594a88daf873069ff570cdce3fd07f2fa55f124 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Thu, 5 Mar 2020 20:37:03 +0100 Subject: [PATCH] fixes #224 and fixes #212 --- Account/Account.php | 4 +- DataStorage/Database/DataMapperAbstract.php | 108 ++++++++++++++++++-- Localization/Defaults/LanguageMapper.php | 10 +- Localization/Defaults/localization.sqlite | Bin 24178688 -> 24178688 bytes 4 files changed, 109 insertions(+), 13 deletions(-) diff --git a/Account/Account.php b/Account/Account.php index 27606dad1..c173d65a5 100644 --- a/Account/Account.php +++ b/Account/Account.php @@ -441,7 +441,7 @@ class Account implements ArrayableInterface, \JsonSerializable */ public function getCreatedAt() : \DateTime { - return $this->createdAt ?? new \DateTime('NOW'); + return $this->createdAt; } /** @@ -489,7 +489,7 @@ class Account implements ArrayableInterface, \JsonSerializable */ public function updateLastActive() : void { - $this->lastActive = new \DateTime('NOW'); + $this->lastActive = new \DateTime('now'); } /** diff --git a/DataStorage/Database/DataMapperAbstract.php b/DataStorage/Database/DataMapperAbstract.php index 2f57d6fa9..f1c118795 100644 --- a/DataStorage/Database/DataMapperAbstract.php +++ b/DataStorage/Database/DataMapperAbstract.php @@ -2071,13 +2071,19 @@ class DataMapperAbstract implements DataMapperInterface { $mapper = static::$ownsOne[$member]['mapper']; - if (!isset(static::$ownsOne[$member]['by'])) { - $value = self::getInitialized($mapper, $id) ?? $mapper::get($id, RelationType::ALL, null, $depth); - } else { - $value = $mapper::getBy($id, static::$ownsOne[$member]['by'], RelationType::ALL, null, $depth); + if (isset(static::$ownsOne[$member]['column'])) { + if (!isset(static::$ownsOne[$member]['by'])) { + return $mapper::getColumn($id, static::$ownsOne[$member]['column']); + } + + return $mapper::getByColumn($id, static::$ownsOne[$member]['by'], static::$ownsOne[$member]['column']); } - return $value; + if (!isset(static::$ownsOne[$member]['by'])) { + return self::getInitialized($mapper, $id) ?? $mapper::get($id, RelationType::ALL, null, $depth); + } + + return $mapper::getBy($id, static::$ownsOne[$member]['by'], RelationType::ALL, null, $depth); } /** @@ -2145,6 +2151,10 @@ class DataMapperAbstract implements DataMapperInterface { $mapper = static::$belongsTo[$member]['mapper']; + if (isset(static::$belongsTo[$member]['column'])) { + return $mapper::getColumn($id, static::$belongsTo[$member]['column']); + } + return self::getInitialized($mapper, $id) ?? $mapper::get($id, RelationType::ALL, null, $depth); } @@ -2493,6 +2503,45 @@ class DataMapperAbstract implements DataMapperInterface return $obj; } + /** + * Get object. + * + * @param mixed $primaryKey Key + * @param string $member Member to load + * + * @return mixed + * + * @since 1.0.0 + */ + public static function getColumn($primaryKey, string $member) + { + if (!isset(self::$parentMapper)) { + self::$parentMapper = static::class; + } + + self::extend(__CLASS__); + + $primaryKey = (array) $primaryKey; + $columnValue = []; + + foreach ($primaryKey as $key => $value) { + $dbData = self::getRaw($value); + $columnValue[] = $dbData[self::getColumnByMember($member)]; + } + + self::clear(); + + $countResulsts = \count($columnValue); + + if ($countResulsts === 0) { + return self::createNullModel(); + } elseif ($countResulsts === 1) { + return \reset($columnValue); + } + + return $columnValue; + } + /** * Get object. * @@ -2620,7 +2669,7 @@ class DataMapperAbstract implements DataMapperInterface if (isset(static::$hasMany[$by]) && static::$hasMany[$by]['self'] !== null) { // todo: maybe wrong?! $toLoad = self::getHasManyPrimaryKeys($value, $by); - } elseif (isset(static::$ownsOne[$by])) { + } else { $toLoad = self::getPrimaryKeysBy($value, self::getColumnByMember($by)); } @@ -2638,6 +2687,53 @@ class DataMapperAbstract implements DataMapperInterface return $obj; } + /** + * Get column. + * + * @param mixed $byKey Key + * @param string $by The field that defines the for + * @param string $member Member to load + * + * @return mixed + * + * @since 1.0.0 + */ + public static function getByColumn($byKey, string $by, string $member) + { + if (!isset(self::$parentMapper)) { + self::$parentMapper = static::class; + } + + self::extend(__CLASS__); + + $byKey = (array) $byKey; + $columnValue = []; + + foreach ($byKey as $key => $value) { + $toLoad = []; + + if (isset(static::$hasMany[$by]) && static::$hasMany[$by]['self'] !== null) { + // todo: maybe wrong?! + $toLoad = self::getHasManyPrimaryKeys($value, $by); + } else { + $toLoad = self::getPrimaryKeysBy($value, self::getColumnByMember($by)); + } + + $columnValue[$value] = self::getColumn($toLoad, $member); + } + + $countResulsts = \count($columnValue); + + if ($countResulsts === 0) { + return self::createNullModel(); + } elseif ($countResulsts === 1) { + return \reset($columnValue); + } + + return $columnValue; + } + + /** * Get object. * diff --git a/Localization/Defaults/LanguageMapper.php b/Localization/Defaults/LanguageMapper.php index 2a7ac002f..36bdbcf08 100644 --- a/Localization/Defaults/LanguageMapper.php +++ b/Localization/Defaults/LanguageMapper.php @@ -34,11 +34,11 @@ class LanguageMapper extends DataMapperAbstract */ protected static array $columns = [ 'language_id' => ['name' => 'language_id', 'type' => 'int', 'internal' => 'id'], - 'language_native' => ['name' => 'language_native', 'type' => 'string', 'internal' => 'name'], - 'language_639_1' => ['name' => 'language_639_1', 'type' => 'string', 'internal' => 'native'], - 'language_639_2T' => ['name' => 'language_639_2T', 'type' => 'string', 'internal' => 'code2'], - 'language_639_2B' => ['name' => 'language_639_2B', 'type' => 'string', 'internal' => 'code3Native'], - 'language_639_3' => ['name' => 'language_639_3', 'type' => 'string', 'internal' => 'code3'], + 'language_name' => ['name' => 'language_name', 'type' => 'string', 'internal' => 'name'], + 'language_native' => ['name' => 'language_native', 'type' => 'string', 'internal' => 'native'], + 'language_639_1' => ['name' => 'language_639_1', 'type' => 'string', 'internal' => 'code2'], + 'language_639_2B' => ['name' => 'language_639_2B', 'type' => 'string', 'internal' => 'code3'], + 'language_639_2T' => ['name' => 'language_639_2T', 'type' => 'string', 'internal' => 'code3Native'], ]; /** diff --git a/Localization/Defaults/localization.sqlite b/Localization/Defaults/localization.sqlite index 854e6e0c85958c8bb52f71981f558f19894c2099..93a5623cb7c3689668b0489d0321b3f9aae03118 100644 GIT binary patch delta 6561 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 G`hE|+x3Zl8 delta 7972 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 V-seN&-sihP7(~PepWh_r{~gK59uEKj