remils/database

Менеджер баз данных

1.0.0 2023-10-09 11:00 UTC

This package is auto-updated.

Last update: 2024-09-09 13:07:34 UTC


README

Достаточно простой в использовании и легко расширяется для создания адаптеров подключения. В данный момент описаны адаптеры, которые работают с PDO, MySQLi и SQLite3.

Установка в проект

Выполните команду в консоли:

composer require remils/database

Менеджер БД

Инициализируйте класс менеджера в нужном вам месте, либо добавьте его в контейнер зависимостей.

<?php

use Remils\Database\Manager;

$manager = new Manager();

Методы менеджера:

Адаптеры подключения

Доступные адаптеры:

Все адаптеры реализуют интерфейс Remils\Database\Contract\ConnectContract.

Методы интерфейса:

Подготовка запроса

Каждый адаптер реализует свою подготовку запроса интерфейса Remils\Database\Contract\StatementContract.

Методы интерфейса:

Типизация параметров в подготавливаемом запросе

Для преобразования типов в подготовительном запросе используются константы из перечисления Remils\Database\Enum\ParameterType.

Обработка запроса

После выполнения execute метода, для обработки результатов выполненного запроса используются методы интерфейса Remils\Database\Contract\ResultContract.

Методы интерфейса:

Репозиторий

Репозитории реализуют интерфейс Remils\Database\Contract\RepositoryContract.

Методы интерфейса:

Для удобства был реализован абстрактный репозиторий, в котором описаны наиболее распространеные методы. Если требуются другие методы, то смело расширяйте свой репозиторий.

Методы абстрактного репозитория:

Пример

<?php

use Remils\Database\AbstractRepository;
use Remils\Database\Manager;
use Remils\Database\PDO\Connect;

require 'vendor/autoload.php';

$manager = new Manager();

$manager->setConnect('default', new Connect('sqlite:test.db'));

$connect = $manager->getConnect('default');

$connect->execute(<<<SQL
    CREATE TABLE IF NOT EXISTS `users` (
        `id` INTEGER PRIMARY KEY AUTOINCREMENT,
        `name` VARCHAR(255)
    );
SQL);

class User
{
    private int $id;

    private string $name;

    public function getId(): int
    {
        return $this->id;
    }

    public function getName(): string
    {
        return $this->name;
    }
}

class UserRepository extends AbstractRepository
{
    public function getConnectName(): string
    {
        return 'default';
    }

    public function getTableName(): string
    {
        return 'users';
    }

    public function getEntityClassName(): string
    {
        return User::class;
    }
}

$userRepository = new UserRepository($manager);

$user = $userRepository->insert([
    'name' => 'Иван',
]);

var_dump($user);

$userRepository->update([
    'name' => 'Василий',
], [
    'id' => $user->getId(),
]);

$user = $userRepository->first([
    'id' => $user->getId(),
]);

var_dump($user);

$userRepository->delete([
    'id' => $user->getId(),
]);