nette/database
Nette Database is a lightweight yet powerful PHP database layer with an intuitive query builder, safe parameter binding, and support for MySQL, PostgreSQL, SQLite, MS SQL, and Oracle. Clean API plus optional ORM-like conveniences make queries simple and secure.
Selection/ActiveRow model is well suited to reporting, exports, admin grids, and data-migration scripts where you want joins inferred from foreign keys instead of hand-written relation definitions. If a roadmap item is "internal reporting/dashboards," this is a credible accelerator; if it's "core domain modeling," it is the wrong tool.DeadlockException, LockTimeoutException, CheckConstraintViolationException, ConnectionLostException let us define per-failure-mode retry and idempotency policy instead of a catch-all QueryException handler. That's a concrete error-budget/SLO decision, not a nice-to-have.getPdo()/getDsn(), removed IRow/IRowContainer, Connection+Explorer merged, changed type-conversion defaults). Product call: adopt and pin 3.2.x for stability, treat v4 as a re-evaluation gate, and budget a migration spike if we commit.NOASSERTION) are procurement/legal decisions, not engineering ones — resolve before adoption, not after.Consider it when most of these hold:
Look elsewhere when any of these hold:
lastInsertId/date-conversion semantics in one request, and a class of bugs that is expensive to reason about. The cost almost always exceeds the ergonomic win for CRUD.NOASSERTION must be resolved by legal before any code lands; if it can't be, stop here.To executives (30 seconds): This is a small, free, mature PHP database library — the cost isn't license fees, it's integration and ownership. Its value is narrow and real: safe SQL with automatic parameter binding, typed results, and one API across five database engines including MSSQL and Oracle. Its risk is also real: it's not built for our framework, its community is small, its license needs clearing, and adopting it means running a second data-access layer. Recommendation: approve a short, timeboxed spike on a bounded, read-only workstream (e.g., internal reporting) with a clear exit criterion — not a framework-wide adoption. Expected cost: days, not weeks. Expected downside if abandoned: near zero.
To engineering:
Selection/ActiveRow with FK-inferred joins, nested transaction() with guards against manual commit/rollback inside it, driver abstraction, and — since 3.2.9 — specific exception types for deadlocks, lock timeouts, check-constraint violations, and lost connections, which is exactly what retry logic needs.getPdo()/getDsn()/IRow, merged Connection+Explorer, changed boolean/datetime conversion defaults) — attractive for new drivers beyond PDO, but not a foundation to build on today.How can I help you explore Laravel packages today?