What problem does it solve? Writing data-access code in OrangeHRM requires following a strict, codebase-wide convention: plugin-specific DAO classes extending BaseDao, QueryBuilder patterns, Paginator-based counts, and FilterParams-driven filtering. This Skill encodes all of those conventions so new DAO methods match the existing ~99 DAOs instead of introducing divergent patterns. ## Core Features & Use Cases - DAO authoring guidance: Covers BaseDao, EntityManagerHelperTrait's 13 methods, the persist-plus-flush convention, and when to use find/findOneBy/findBy versus QueryBuilder. - Query patterns: Documents joins via relation aliases, expression-builder usage (orX/andX/like/concat/in/isNull), conditional joins, parameter binding, and the array_column result-extraction trick. - Pagination and transactions: Explains Paginator for accurate counts on joined queries, QueryBuilderWrapper for returning buildable queries, and begin/commit/rollback transaction handling. - Blob handling: Describes the Partial<EntityName> DTO projection pattern and the dedicated-endpoint-plus-ETag approach for serving binary content like employee pictures. - Use Case: When asked to add a new filtered, paginated list endpoint for an entity, use this Skill to produce a DAO with a private paginator-builder method shared by the list and count methods, matching the EmployeeDao pattern. ## Quick Start Ask the agent to write a new DAO method for an OrangeHRM plugin following the daos skill conventions, for example a paginated employee search filtered by subunit.