20250802
This commit is contained in:
80
sources/traits/Database/DatabaseCountExist.php
Normal file
80
sources/traits/Database/DatabaseCountExist.php
Normal file
@@ -0,0 +1,80 @@
|
||||
<?php
|
||||
/**
|
||||
* @noinspection SqlNoDataSourceInspection
|
||||
*/
|
||||
|
||||
namespace goodboyalex\php_db_components_pack\traits\Database;
|
||||
|
||||
use goodboyalex\php_db_components_pack\classes\ConditionBuilder;
|
||||
use goodboyalex\php_db_components_pack\enums\DBDriver;
|
||||
use PDO;
|
||||
|
||||
/**
|
||||
* Трейт для подсчета количества записей в таблице базы данных и проверки существования записи.
|
||||
*
|
||||
* @author Александр Бабаев
|
||||
* @package php_db_components_pack
|
||||
* @version 1.0
|
||||
* @since 1.0
|
||||
* @see PDO
|
||||
*/
|
||||
trait DatabaseCountExist
|
||||
{
|
||||
/**
|
||||
* Подсчитывает количество строк, удовлетворяющих условию.
|
||||
*
|
||||
* @param string $table Имя таблицы.
|
||||
* @param ConditionBuilder $where Условия выборки.
|
||||
*
|
||||
* @return int Количество строк или -1, в случае ошибки.
|
||||
*/
|
||||
public function Count (string $table, ConditionBuilder $where): int
|
||||
{
|
||||
/**
|
||||
* Получаем условия.
|
||||
*
|
||||
* @var string $sql_where Строка WHERE условий.
|
||||
* @var array $params Параметры условий.
|
||||
*/
|
||||
[$sql_where, $params] = $where->Build();
|
||||
|
||||
// Создаю запрос
|
||||
$sql = "SELECT COUNT(*) FROM $this->DBSignOpen$table$this->DBSignClose";
|
||||
|
||||
// Если заданы where-параметры
|
||||
if ($where->Count() > 0)
|
||||
// - то добавляю их
|
||||
$sql .= ' WHERE ' . $sql_where;
|
||||
|
||||
// Выполняю запрос
|
||||
$countResult = $this->Query($sql, $params);
|
||||
|
||||
// Если запрос выполнен с ошибкой
|
||||
if ($countResult === false)
|
||||
// - то в результат идёт -1
|
||||
return -1;
|
||||
|
||||
// Получаю секцию
|
||||
$section = match ($this->Config->Driver) {
|
||||
DBDriver::MySQL, DBDriver::SQLite => "COUNT(*)",
|
||||
DBDriver::MSSQL, DBDriver::OracleDB, DBDriver::PostgreSQL => ""
|
||||
};
|
||||
|
||||
// Вывожу количество
|
||||
return isset($countResult[0][$section]) ? (int)$countResult[0][$section] : -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, существует ли запись в таблице.
|
||||
*
|
||||
* @param string $table Имя таблицы.
|
||||
* @param ConditionBuilder $where Условия выборки.
|
||||
*
|
||||
* @return bool Результат проверки.
|
||||
*/
|
||||
public function IsExist (string $table, ConditionBuilder $where): bool
|
||||
{
|
||||
// Вывожу результат
|
||||
return $this->Count($table, $where) > 0;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user