Generates Read/Write Connection Proxy for PHP 8.4. Creates connection wrapper with query routing logic, transaction-aware routing, and replica health checks. Includes unit tests.
From accnpx claudepluginhub dykyi-roman/awesome-claude-code --plugin accThis skill uses the workspace's default tool permissions.
references/examples.mdreferences/templates.mdCreates database connection proxy infrastructure for read/write splitting and replica routing.
| Scenario | Example |
|---|---|
| High read load | Route SELECT queries to replicas |
| Database scaling | Distribute reads across multiple replicas |
| Write protection | Ensure writes go to primary only |
| Transaction safety | Route all queries in transaction to primary |
Path: src/Infrastructure/Database/
ReadWriteConnectionInterface.php — Connection contractConnectionConfig.php — Configuration value objectConnectionRole.php — Enum (Primary, Replica)Path: src/Infrastructure/Database/
ReadWriteConnectionProxy.php — Query routing proxyPath: src/Infrastructure/Database/
ReplicaHealthChecker.php — Replica availability monitorConnectionConfigTest.php — Configuration validation testsReadWriteConnectionProxyTest.php — Routing behavior tests| Component | Path |
|---|---|
| All Classes | src/Infrastructure/Database/ |
| Unit Tests | tests/Unit/Infrastructure/Database/ |
| Component | Pattern | Example |
|---|---|---|
| Interface | ReadWriteConnectionInterface | ReadWriteConnectionInterface |
| Proxy | ReadWriteConnectionProxy | ReadWriteConnectionProxy |
| Config VO | ConnectionConfig | ConnectionConfig |
| Role Enum | ConnectionRole | ConnectionRole::Primary |
| Health Checker | ReplicaHealthChecker | ReplicaHealthChecker |
| Test | {ClassName}Test | ReadWriteConnectionProxyTest |
interface ReadWriteConnectionInterface
{
/** @return list<array<string, mixed>> */
public function query(string $sql, array $params = []): array;
public function execute(string $sql, array $params = []): int;
public function beginTransaction(): void;
public function commit(): void;
public function rollback(): void;
public function inTransaction(): bool;
}
final readonly class ConnectionConfig
{
/** @param list<string> $replicaDsns */
public function __construct(
public string $primaryDsn,
public array $replicaDsns = [],
public bool $stickyAfterWrite = true
) {}
}
final class ReadWriteConnectionProxy implements ReadWriteConnectionInterface
{
public function query(string $sql, array $params = []): array;
public function execute(string $sql, array $params = []): int;
public function beginTransaction(): void;
public function commit(): void;
public function rollback(): void;
}
$config = new ConnectionConfig(
primaryDsn: 'mysql:host=primary.db;dbname=app',
replicaDsns: [
'mysql:host=replica1.db;dbname=app',
'mysql:host=replica2.db;dbname=app',
],
stickyAfterWrite: true
);
$connection = new ReadWriteConnectionProxy($config, $pdoFactory, $healthChecker);
// Routed to replica
$users = $connection->query('SELECT * FROM users WHERE active = ?', [1]);
// Routed to primary
$connection->execute('UPDATE users SET name = ? WHERE id = ?', ['John', 1]);
// After write, reads also go to primary (sticky)
$user = $connection->query('SELECT * FROM users WHERE id = ?', [1]);
query(SQL) ──→ Is SELECT?
│ │
YES NO
│ │
In transaction? ──→ Primary
│
Sticky after write? ──→ Primary
│
Pick healthy replica ──→ Replica
│
No healthy replicas? ──→ Primary (fallback)
| Anti-pattern | Problem | Solution |
|---|---|---|
| Read-after-write to replica | Stale data returned | Use sticky connection |
| No health checks | Route to dead replica | Periodic health monitoring |
| Replica in transaction | Inconsistent reads | All transaction queries to primary |
| Single replica | No load distribution | Support multiple replicas |
| No fallback | Failure when all replicas down | Fall back to primary |
| SELECT FOR UPDATE to replica | Locking on read-only connection | Detect locking queries |
For complete PHP templates and examples, see:
references/templates.md — ConnectionInterface, Proxy, Config, HealthChecker templatesreferences/examples.md — Repository integration examples and testsProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.