remils / database
Менеджер баз данных
Requires
- php: ^8.1
Requires (Dev)
- phpstan/phpstan: ^1.10
- squizlabs/php_codesniffer: 3.*
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(), ]);