solophp/base-repository

Base repository pattern implementation for PHP applications

Maintainers

Package info

github.com/SoloPHP/Base-Repository

pkg:composer/solophp/base-repository

Statistics

Installs: 4

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v3.1.0 2026-06-04 08:38 UTC

This package is auto-updated.

Last update: 2026-06-04 08:40:13 UTC


README

Lightweight PHP repository pattern with built-in soft delete, eager loading, and rich criteria syntax.

Latest Version PHP Version License

Features

  • Soft delete with restore/force delete
  • Eager loading (BelongsTo, HasOne, HasMany, BelongsToMany)
  • Rich criteria syntax: operators, BETWEEN, OR/AND groups, and correlated EXISTS via relation dot-notation
  • Built-in aggregations (count, sum, avg, min, max)
  • Translation via withLocale() — auto LEFT JOIN, propagates into relation EXISTS
  • Transaction helpers with row locking (SELECT ... FOR UPDATE) and cross-process advisory locks (withLock()) for idempotency
  • Custom IDs (UUID, ULID, prefixed) via $autoIncrement = false

Installation

composer require solophp/base-repository

Requirements: PHP 8.3+, Doctrine DBAL ^4.3

Database: any Doctrine DBAL platform. Locking is platform-specific: lockForUpdate() — MySQL/MariaDB, PostgreSQL, Oracle; withLock() advisory locking — MySQL/MariaDB (GET_LOCK) and PostgreSQL (pg_advisory_lock). Other platforms throw on these calls.

Quick Example

class UserRepository extends BaseRepository
{
    protected ?string $deletedAtColumn = 'deleted_at';

    public function __construct(Connection $connection)
    {
        parent::__construct($connection, User::class, 'users');
    }
}

// Usage
$users = $repo->findBy(['status' => 'active'], ['created_at' => 'DESC'], 20, 1);
$repo->delete($id);      // Soft delete
$repo->restore($id);     // Restore

Documentation

📖 Full Documentation

License

MIT