What problem does it solve? OrangeHRM's Doctrine ORM setup has non-obvious wiring — a single shared EntityManager, multi-path entity discovery across plugin directories, a multi-path PSR-4 namespace in composer.json, and dev/prod cache and proxy splits — and misconfiguring any of these causes confusing errors like "class not found" or "entity has no metadata." This Skill documents the full bootstrap so you can register new plugin entities, debug mapping failures, and extend DQL without trial and error. ## Core Features & Use Cases - Entity registration guidance: Explains the two required registrations (ohrm_plugin_paths for Doctrine scanning and the OrangeHRM\Entity\ PSR-4 array in src/composer.json) plus the composer dump-autoload step that is commonly forgotten. - Cache and proxy management: Documents the dev ArrayAdapter vs prod FilesystemAdapter split, AUTOGENERATE_ALWAYS vs AUTOGENERATE_NEVER proxy strategies, and the bin/console cache:clear and orm:generate-proxies commands needed after entity changes. - Custom DQL functions and enum mapping: Shows how to add custom DQL functions like TIME_DIFF by extending FunctionNode, and how legacy MySQL ENUM columns are mapped to strings via a platform-level type mapping. - Use Case: You create a new plugin with an entity directory and get "Entity 'OrangeHRM\Entity\Foo' has no metadata" at query time — this Skill walks you through the PSR-4 registration, dump-autoload, and cache-clearing steps to fix it. ## Quick Start Ask the agent to explain how to register a new plugin's entity directory with Doctrine and fix the resulting metadata error.