jardissupport / repository
Generic CRUD repository with raw-data access, read/write splitting, and pluggable primary key strategies
Requires
- php: >=8.2
- ext-pdo: *
- jardissupport/contract: ^1.0
- jardissupport/dbquery: ^1.0
Requires (Dev)
- jardisadapter/dbconnection: ^1.0
- jardissupport/dotenv: ^1.0
- phpstan/phpstan: ^2.0.4
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.11.2
This package is auto-updated.
Last update: 2026-03-31 07:46:11 UTC
README
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 Strategies —
PkStrategy::AUTOINCREMENT,PkStrategy::INTEGER,PkStrategy::NONEfor all insert patterns - ConnectionPool Integration — accepts a
ConnectionPoolInterfaceor a plainPDOinstance - Query Builder Support —
findByQuery()accepts anyDbQueryBuilderInterfacefor complex SELECT statements - Exists Check —
exists()avoids full row fetches when only presence matters - Batch Delete —
deleteAll()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.