jardissupport/repository

Generic CRUD repository with raw-data access, read/write splitting, and pluggable primary key strategies

Maintainers

Package info

github.com/jardisSupport/repository

pkg:composer/jardissupport/repository

Statistics

Installs: 81

Dependents: 1

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-03-31 07:45 UTC

This package is auto-updated.

Last update: 2026-03-31 07:46:11 UTC


README

Build Status License: PolyForm Shield PHP Version PHPStan Level PSR-12 Coverage

Part of the Jardis Business Platform — Enterprise-grade PHP components for Domain-Driven Design

Generic CRUD repository operating on raw data — no entities, no ORM, just arrays in and out. Built-in read/write splitting routes queries to readers and mutations to the writer. Three primary key strategies cover autoincrement, generated integers, and application-supplied keys.

Features

  • Raw Data — arrays in, arrays out; no entity mapping, no hydration overhead
  • Read/Write Splitting — queries automatically route to a dedicated reader; mutations go to the writer
  • 3 PK StrategiesPkStrategy::AUTOINCREMENT, PkStrategy::INTEGER, PkStrategy::NONE for all insert patterns
  • ConnectionPool Integration — accepts a ConnectionPoolInterface or a plain PDO instance
  • Query Builder SupportfindByQuery() accepts any DbQueryBuilderInterface for complex SELECT statements
  • Exists Checkexists() avoids full row fetches when only presence matters
  • Batch DeletedeleteAll() removes multiple rows in a single call
  • Lazy Connection Initialization — reader and writer connections are opened only when first used

Installation

composer require jardissupport/repository

Quick Start

use JardisSupport\Repository\Repository;
use JardisPort\Repository\PrimaryKey\PkStrategy;

$repository = new Repository($pdo);

// Insert a row — returns the new autoincrement id
$id = $repository->insert('orders', 'id', [
    'customer_id' => 42,
    'total'       => 199.99,
    'status'      => 'pending',
]);

// Fetch by primary key
$row = $repository->findById('orders', 'id', $id);

// Update
$repository->update('orders', 'id', $id, ['status' => 'confirmed']);

// Delete
$repository->delete('orders', 'id', $id);

Advanced Usage

use JardisSupport\Repository\Repository;
use JardisSupport\DbQuery\DbQuery;
use JardisPort\Repository\PrimaryKey\PkStrategy;

// Read/write splitting via a connection pool
$repository = new Repository($connectionPool);

// Application-supplied UUID key (PkStrategy::NONE — no last-insert-id lookup)
$uuid = $uuidGenerator->generate();
$repository->insert('products', 'uuid', ['uuid' => $uuid, 'name' => 'Widget'], PkStrategy::NONE);

// Complex query via DbQuery builder
$query = (new DbQuery())
    ->select('o.id, o.total, c.email')
    ->from('orders', 'o')
    ->innerJoin('customers', 'o.customer_id = c.id', 'c')
    ->where('o.status')->eq('pending')
    ->and('o.total')->gte(100)
    ->orderBy('o.created_at', 'DESC')
    ->limit(20);

$rows = $repository->findByQuery($query);

// Batch delete
$repository->deleteAll('sessions', 'id', [101, 102, 103]);

// Existence check without fetching the row
if ($repository->exists('users', 'id', $userId)) {
    // ...
}

Documentation

Full documentation, guides, and API reference:

docs.jardis.io/support/repository

License

This package is licensed under the PolyForm Shield License 1.0.0. Free for all use except building competing frameworks or developer tooling.

Jardis · Documentation · Headgent