Rudra FrameworkRudra Framework

Rudra\Model\Repository

Универсальный репозиторий данных для работы с таблицами базы данных через PDO.
Предоставляет лёгкий, безопасный и гибкий CRUD-интерфейс без ORM, с поддержкой кэширования, пагинации и нескольких СУБД (MySQL, PostgreSQL, SQLite).

Разработан в духе Rudra: минимализм, контроль, отсутствие избыточной абстракции.


ℹ️Основные особенности

  • Прямая работа с PDO — никаких ORM, только чистый SQL и Query Builder (QB).
  • Поддержка трёх СУБД — одинаковый API для MySQL, PostgreSQL, SQLite.
  • Гибкое управление подключением — через connection(), onConnection(), withConnection().
  • Кэширование результатов — в JSON-файлы с TTL и точечной очисткой.
  • Полный CRUD — find(), findBy(), create(), update(), delete(), getAll(), search().
  • Интеграция с пагинацией — метод getAllPerPage().
  • Автоматическое извлечение структуры таблицы — через getFields(), getColumns().

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

Базовый CRUD

$repo = new Repository('users');

// Чтение
$user = $repo->find(1);
$admin = $repo->findBy('role', 'admin');

// Создание
$repo->create(['name' => 'Alice', 'email' => 'alice@example.com']);

// Обновление
$repo->update(['id' => 1, 'name' => 'Alice Smith']);

// Удаление
$repo->delete(1);

Пагинация

$pagination = new Pagination(page: 1, perPage: 10, total: $repo->numRows());
$users = $repo->getAllPerPage($pagination, 'id, name, email');

Поиск

$matches = $repo->search('john', 'name'); // LIKE '%john%'

Кэширование

// Кэширует результат $repo->getAll() на 1 час
$users = $repo->cache(['getAll', ['id ASC']], '1 hour');

// Очистить кэш для метода
$repo->clearCache('database', 'getAll');

// Очистить всё
$repo->clearCache('all');

Смена подключения

$backup = new \PDO('sqlite:/backup.db');
$backupRepo = $repo->withConnection($backup);

⚠️ Важно: доверие разработчику

  • Имена полей в findBy() и search() должны быть заданы в коде, а не браться из пользовательского ввода.
  • Класс не валидирует имена полей — это сознательный выбор в пользу производительности и минимализма.
  • Ответственность за безопасность — на разработчике, как и во всём Rudra.

ℹ️Поддерживаемые типы кэша

  • database — кэш запросов к БД
  • templates — кэш шаблонов (например, PHP-рендера)
  • twig — кэш скомпилированных Twig-шаблонов
  • routes — кэш маршрутов (если используется)

Очистка:

$repo->clearCache('templates', 'home'); // один файл
$repo->clearCache('all');               // все типы