Part of Jardis — the Domain-Driven Design platform for PHP. You model your domain; Jardis generates the production-ready hexagonal code (DTOs, Command/Query handlers, repositories, persistence). This package is part of the open-source foundation that generated code runs on.
An implementation of the repository pattern for PHP: a 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. It is the persistence building block that the repositories in generated Jardis code rely on.
- 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
composer require jardissupport/repositoryuse 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);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)) {
// ...
}Full documentation, guides, and API reference:
docs.jardis.io/en/support/repository
This package is licensed under the MIT License.
Jardis · Documentation · Headgent
Dieses Package liefert einen Skill für Claude Code, Cursor, Continue und Aider mit. Installation im Konsumentenprojekt:
composer require --dev jardis/dev-skillsMehr Details: https://docs.jardis.io/en/skills