3 Commits
9.x ... 10.1

Author SHA1 Message Date
User
335c4d240c 20250427#1 2025-04-27 01:31:26 +03:00
User
91af1ea14f 20250419#2 2025-04-19 18:46:40 +03:00
User
41523e6899 20250419#1 2025-04-19 18:45:41 +03:00
7 changed files with 37 additions and 25 deletions

View File

@@ -10,12 +10,12 @@ Stable version
composer require rmphp/storage composer require rmphp/storage
``` ```
```bash ```bash
composer require rmphp/storage:"^9.0" composer require rmphp/storage:"^10.0"
``` ```
Dev version contains the latest changes Dev version contains the latest changes
```bash ```bash
composer require rmphp/storage:"9.x-dev" composer require rmphp/storage:"10.x-dev"
``` ```

View File

@@ -8,8 +8,8 @@ use Attribute;
class ValueObject { class ValueObject {
public function __construct( public function __construct(
public bool $autoPropertyName = false,
public ?string $propertyName = null, public ?string $propertyName = null,
public bool $firstProperty = false
) {} ) {}
} }

View File

@@ -5,4 +5,4 @@ namespace Rmphp\Storage\Attribute;
use Attribute; use Attribute;
#[Attribute(Attribute::TARGET_CLASS)] #[Attribute(Attribute::TARGET_CLASS)]
class ValueObjectAutoPropertyName {} class ValueObjectFirstProperty {}

View File

@@ -0,0 +1,14 @@
<?php
namespace Rmphp\Storage\Attribute;
use Attribute;
#[Attribute(Attribute::TARGET_CLASS)]
class ValueObjectPropertyName {
public function __construct(
public ?string $name = null,
) {}
}

View File

@@ -4,7 +4,6 @@ namespace Rmphp\Storage\Entity;
interface ValueObjectInterface { interface ValueObjectInterface {
public function getValue();
public function __toString(): string; public function __toString(): string;
} }

View File

@@ -13,26 +13,23 @@ class MysqlStorage implements MysqlStorageInterface {
private Mysqli $mysqli; private Mysqli $mysqli;
/** /**
* Внутренний конструктор подключения к БД * @param array $paramsArray
* Mysql constructor.
* @param object $params
* @throws Exception * @throws Exception
*/ */
public function __construct( public function __construct(array $paramsArray) {
private readonly object $params $params = (object) $paramsArray;
) {
$this->mysqli = new mysqli( $this->mysqli = new mysqli(
$this->params->host, $params->host,
$this->params->user, $params->user,
$this->params->pass, $params->pass,
$this->params->base $params->base
); );
// выводим ошибку при неудачном подключении // выводим ошибку при неудачном подключении
if ($this->mysqli->connect_errno) { if ($this->mysqli->connect_errno) {
throw new Exception($this->mysqli->connect_errno); throw new Exception($this->mysqli->connect_errno);
} }
$this->mysqli->set_charset("utf8"); $this->mysqli->set_charset($params->chartset ?? "utf8");
if(!empty($this->params->logsEnable)) $this->logsEnabled = true; if(!empty($params->logs)) $this->logsEnabled = true;
} }
/** @inheritDoc */ /** @inheritDoc */

View File

@@ -10,7 +10,8 @@ use Rmphp\Storage\Attribute\Property;
use Rmphp\Storage\Attribute\PropertyNoReturn; use Rmphp\Storage\Attribute\PropertyNoReturn;
use Rmphp\Storage\Attribute\PropertyNoReturnIfNull; use Rmphp\Storage\Attribute\PropertyNoReturnIfNull;
use Rmphp\Storage\Attribute\ValueObject; use Rmphp\Storage\Attribute\ValueObject;
use Rmphp\Storage\Attribute\ValueObjectAutoPropertyName; use Rmphp\Storage\Attribute\ValueObjectFirstProperty;
use Rmphp\Storage\Attribute\ValueObjectPropertyName;
use Rmphp\Storage\Component\AbstractDataObject; use Rmphp\Storage\Component\AbstractDataObject;
use Rmphp\Storage\Exception\RepositoryException; use Rmphp\Storage\Exception\RepositoryException;
@@ -60,16 +61,22 @@ abstract class AbstractRepository extends AbstractDataObject implements Reposito
self::$attributeObjects[$valueObjectClass] = !empty(self::$classes[$valueObjectClass]->getAttributes(ValueObject::class)) self::$attributeObjects[$valueObjectClass] = !empty(self::$classes[$valueObjectClass]->getAttributes(ValueObject::class))
? self::$classes[$valueObjectClass]->getAttributes(ValueObject::class)[0]->newInstance() ? self::$classes[$valueObjectClass]->getAttributes(ValueObject::class)[0]->newInstance()
: new ValueObject(); : new ValueObject();
if(!empty(self::$classes[$valueObjectClass]->getAttributes(ValueObjectFirstProperty::class))) {
self::$attributeObjects[$valueObjectClass]->firstProperty = true;
}
if(!empty(self::$classes[$valueObjectClass]->getAttributes(ValueObjectPropertyName::class))) {
$propertyName = self::$classes[$valueObjectClass]->getAttributes(ValueObjectPropertyName::class)[0]->newInstance();
if(isset($propertyName->name)) self::$attributeObjects[$valueObjectClass]->propertyName = $propertyName->name;
}
} }
$valueObjectAttributes = self::$attributeObjects[$valueObjectClass]; $valueObjectAttributes = self::$attributeObjects[$valueObjectClass];
if(!empty(self::$classes[$valueObjectClass]->getAttributes(ValueObjectAutoPropertyName::class))) $valueObjectAttributes->autoPropertyName = true;
if(!empty($valueObjectAttributes->propertyName) && self::$classes[$valueObjectClass]->hasProperty($valueObjectAttributes->propertyName)){ if(!empty($valueObjectAttributes->propertyName) && self::$classes[$valueObjectClass]->hasProperty($valueObjectAttributes->propertyName)){
if(self::$classes[$valueObjectClass]->getProperty($valueObjectAttributes->propertyName)->isInitialized($property->getValue($object))){ if(self::$classes[$valueObjectClass]->getProperty($valueObjectAttributes->propertyName)->isInitialized($property->getValue($object))){
$fieldValue[$property->getName()] = self::$classes[$valueObjectClass]->getProperty($valueObjectAttributes->propertyName)->getValue($property->getValue($object)); $fieldValue[$property->getName()] = self::$classes[$valueObjectClass]->getProperty($valueObjectAttributes->propertyName)->getValue($property->getValue($object));
} }
} }
elseif(!empty($valueObjectAttributes->autoPropertyName) && count(self::$classes[$valueObjectClass]->getProperties()) === 1){ elseif(!empty($valueObjectAttributes->firstProperty) && count(self::$classes[$valueObjectClass]->getProperties()) > 0){
if(self::$classes[$valueObjectClass]->getProperties()[0]->isInitialized($property->getValue($object))){ if(self::$classes[$valueObjectClass]->getProperties()[0]->isInitialized($property->getValue($object))){
$fieldValue[$property->getName()] = self::$classes[$valueObjectClass]->getProperties()[0]->getValue($property->getValue($object)); $fieldValue[$property->getName()] = self::$classes[$valueObjectClass]->getProperties()[0]->getValue($property->getValue($object));
} }
@@ -77,11 +84,6 @@ abstract class AbstractRepository extends AbstractDataObject implements Reposito
elseif(self::$classes[$valueObjectClass]->hasMethod('getValue')){ elseif(self::$classes[$valueObjectClass]->hasMethod('getValue')){
$fieldValue[$property->getName()] = $property->getValue($object)->getValue(); $fieldValue[$property->getName()] = $property->getValue($object)->getValue();
} }
elseif(count(self::$classes[$valueObjectClass]->getProperties()) === 1){
if(self::$classes[$valueObjectClass]->getProperties()[0]->isInitialized($property->getValue($object))){
$fieldValue[$property->getName()] = self::$classes[$valueObjectClass]->getProperties()[0]->getValue($property->getValue($object));
}
}
} }
elseif(is_bool($property->getValue($object))){ elseif(is_bool($property->getValue($object))){
$fieldValue[$property->getName()] = (int)$property->getValue($object); $fieldValue[$property->getName()] = (int)$property->getValue($object);