dbpp — обёртка над PDO

levkopo levkopo 2 Декабря 2021

Всем привет!
Я решил пока что представить свои библиотеки здесь, первой будет самая любимая — dbpp.


dbpp — это обёртка над PDO, которая предоставляет удобное и безопасное обращение к базам данных. Также она группирует все ваши обращения к базе данных, для того, чтобы при изменении базы данных, вам было проще переписать SQL запросы. Вдохновлено библиотекой Room от Google.

Установка

Установка возможна через composer:

composer require ppeco/dbpp

Обязательно нужен PHP 8.0

Пример использования

Допустим у нас есть база данных, например social. В ней будет таблицы users, которые будут содержать пользователей.

Для начала работы нужно создать класс расширенный от Database, который будет работать с нашей базой. Назовём её SocialDatabase.

<?php

use dbpp\Database;

class SocialDatabase extends Database {

}

Дальше нам нужно создать класс, который будет работать с нашей таблицей users. Назовём её UsersDao и расширим от класса Dao.

<?php
use dbpp\Dao;

class UsersDao extends Dao {

}

Дальше в нём мы будем писать методы обращения к базе данных.
Давайте напишем метод создания пользователя в базе данных:

#[Insert('INSERT INTO `users`(`id`, `name`) VALUES (NULL, :name)', ['id')]
public function create(string $name): int|false {
    return parent::create($name);
}

Также давайте напишем метод получения всех пользователей в таблице:

#[Query('SELECT * FROM `users`')]
public function getAll(): array|false {
    return parent::getAll();
}

UsersDao у нас готов, теперь его нужно подключить к SocialDatabase.
Нужно просто добавить в класс SocialDatabase public UsersDao $users;

Ну и всё, осталось только создать экземпляр класса SocialDatabase и сделать нужные запросы:

$db = new SocialDatabase(new PDO(...));
if ($userId = $db->users->create("Имя пользователя"))
    echo 'Новый пользователем с id: '.$userId.'</br>';
else echo 'Пользователь не создан</br>';

$users = $db->users->getAll();
foreach($users as $i => $user) {
    echo $i.'. '.$user['name'].'</br>';
}

Как это работает?

При обращении к методу вызывается магическая функция в Dao, которая ищет атрибут запроса в методе и обращается к PDO, который возвращает некий результат. dbpp смотрит то что вам надо и старается подобрать подходящий тип результата.

GitHub: Перейти

Всем спасибо за внимание!

1 Ответ

  1. Evg Evg 2 Декабря 2021 (ред.)

    Очень интересно. Спасибо. А я глядя ваш сайт почему-то подумал, по материалам: Kotlin, KayJam, наподобие JavaScript… что-то будет не связано с php, а тут php smile Интересно.