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.0.0 2026-06-12 16:23 UTC

This package is auto-updated.

Last update: 2026-06-12 16:34: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
  • Named scopes: virtual criteria keys expanded into reusable criteria fragments (ideal for HTTP filters)
  • Built-in aggregations (count, sum, avg, min, max)
  • Translation via withLocale() with optional fallback locale — auto LEFT JOIN, propagates into relations; seedTranslations() fills all locales on create (cross-platform)
  • 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