20250806
This commit is contained in:
38
sources/attributes/Compare.php
Normal file
38
sources/attributes/Compare.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
/**
|
||||
* Отключаю несущественные инспекции (из-за Attribute)
|
||||
*
|
||||
* @noinspection PhpMultipleClassDeclarationsInspection
|
||||
*/
|
||||
|
||||
namespace goodboyalex\php_db_components_pack\attributes;
|
||||
|
||||
use Attribute;
|
||||
use Closure;
|
||||
|
||||
/**
|
||||
* Атрибут указания методов сравнения значений поля в таблице базы данных.
|
||||
*
|
||||
* @author Александр Бабаев
|
||||
* @package php_db_components_pack
|
||||
* @version 1.0
|
||||
* @since 1.0
|
||||
*/
|
||||
#[Attribute(flags: Attribute::TARGET_PROPERTY)]
|
||||
final readonly class Compare
|
||||
{
|
||||
/**
|
||||
* @var Closure|null $Function Метод сравнения значений.
|
||||
*/
|
||||
public ?Closure $Function;
|
||||
|
||||
/**
|
||||
* Конструктор.
|
||||
*
|
||||
* @param callable|null $function Метод сравнения значений.
|
||||
*/
|
||||
public function __construct (?callable $function = null)
|
||||
{
|
||||
$this->Function = $function;
|
||||
}
|
||||
}
|
@@ -31,22 +31,15 @@
|
||||
*/
|
||||
public ?Closure $ConvertFromDB;
|
||||
|
||||
/**
|
||||
* @var Closure|null Метод сравнения типов.
|
||||
*/
|
||||
public ?Closure $Compare;
|
||||
|
||||
/**
|
||||
* Конструктор.
|
||||
*
|
||||
* @param callable|null $fromType Метод конвертации из типа для заполнения таблицы базы данных.
|
||||
* @param callable|null $toType Метод конвертации в тип для заполнения таблицы базы данных.
|
||||
* @param callable|null $compare Метод сравнения типов.
|
||||
*/
|
||||
public function __construct (?callable $fromType = null, ?callable $toType = null, ?callable $compare = null)
|
||||
public function __construct (?callable $fromType = null, ?callable $toType = null)
|
||||
{
|
||||
$this->ConvertToDB = $fromType;
|
||||
$this->ConvertFromDB = $toType;
|
||||
$this->Compare = $compare;
|
||||
}
|
||||
}
|
@@ -3,6 +3,7 @@
|
||||
namespace goodboyalex\php_db_components_pack\classes;
|
||||
|
||||
use goodboyalex\php_components_pack\classes\Tuple;
|
||||
use goodboyalex\php_components_pack\extensions\StringExtension;
|
||||
use goodboyalex\php_components_pack\interfaces\IArrayable;
|
||||
use PHPUnit\Event\InvalidArgumentException;
|
||||
|
||||
@@ -106,11 +107,29 @@
|
||||
*/
|
||||
public function Get (int $index = 0): Tuple
|
||||
{
|
||||
// Формирование условия SQL
|
||||
$sql = "`$this->ColumnName` $this->Operator :prop_$index";
|
||||
// Начинаю формировать SQL
|
||||
$sql = (!str_starts_with($this->ColumnName, "FUNC:"))
|
||||
? "`$this->ColumnName`"
|
||||
: StringExtension::Replace('FUNC:', '', $this->ColumnName);
|
||||
|
||||
// Формирование параметров запроса
|
||||
$params = [":prop_$index" => $this->Value];
|
||||
// Добавляю оператор
|
||||
$sql .= " $this->Operator ";
|
||||
|
||||
// Если это строковое значение и передаётся функция
|
||||
if (is_string($this->Value) && str_starts_with($this->Value, "FUNC:")) {
|
||||
// - то добавляю код SQL этой функции
|
||||
$sql .= StringExtension::Replace('FUNC:', '', $this->ColumnName);
|
||||
|
||||
// - и устанавливаю пустые параметры запроса
|
||||
$params = [];
|
||||
}
|
||||
else {
|
||||
// - в противном случае, добавляю "муляжное" значение
|
||||
$sql .= ":prop_$index";
|
||||
|
||||
// - а настоящее пропишем в параметрах запроса
|
||||
$params = [":prop_$index" => $this->Value];
|
||||
}
|
||||
|
||||
// Возвращение результата
|
||||
return new Tuple($sql, $params);
|
||||
|
@@ -2,6 +2,7 @@
|
||||
|
||||
/**
|
||||
* @noinspection SqlNoDataSourceInspection
|
||||
* @noinspection PhpMultipleClassDeclarationsInspection
|
||||
*/
|
||||
|
||||
namespace goodboyalex\php_db_components_pack\traits\Database;
|
||||
@@ -11,6 +12,7 @@
|
||||
use goodboyalex\php_components_pack\classes\Tuple;
|
||||
use goodboyalex\php_db_components_pack\attributes\AutoIncrement;
|
||||
use goodboyalex\php_db_components_pack\attributes\Check;
|
||||
use goodboyalex\php_db_components_pack\attributes\Compare;
|
||||
use goodboyalex\php_db_components_pack\attributes\ConvertToDB;
|
||||
use goodboyalex\php_db_components_pack\attributes\DataType;
|
||||
use goodboyalex\php_db_components_pack\attributes\DefaultValue;
|
||||
@@ -129,7 +131,16 @@
|
||||
// - получаю функцию конвертации и сравнения
|
||||
$converterToDB = $convertAttr?->ConvertToDB;
|
||||
$converterFromDB = $convertAttr?->ConvertFromDB;
|
||||
$compareFunc = $convertAttr?->Compare;
|
||||
|
||||
/**
|
||||
* Сравнение значений.
|
||||
*
|
||||
* @var Compare|null $compareAttr Атрибут сравнения значений.
|
||||
*/
|
||||
$compareAttr = self::FindAttribute($attributes, Compare::class);
|
||||
|
||||
// - получаю функцию сравнения
|
||||
$compareFunc = $compareAttr?->Function;
|
||||
|
||||
// - получаем свойства столбца
|
||||
/**
|
||||
|
Reference in New Issue
Block a user