Repository abstraction layer between domain handlers and persistence: AbstractObjectModelRepository wraps legacy ObjectModel CRUD inside typed domain exceptions. Does not define any business entities — those live in each domain's adapter layer.
| Layer | Path |
|---|---|
| Core repository base | src/Core/Repository/AbstractObjectModelRepository.php |
| Multi-shop variant | src/Core/Repository/AbstractMultiShopObjectModelRepository.php |
| Domain repositories (30+) | src/Adapter/{Domain}/Repository/ |
| Legacy DB adapter | src/Adapter/Database.php |
AbstractObjectModelRepositorywraps allPrestaShopExceptions in typedCoreExceptionsub-classes — handlers never catch raw PS exceptionspartiallyUpdateObjectModel(array $properties)— partial updates pass an explicit list of fields toObjectModel::update(); avoids overwriting unloaded fieldssoftDeleteObjectModel()vsdeleteObjectModel()— soft delete setsactive=0rather than deleting the row; used for entities with referential integrity constraintsDb::getInstance()is never used in new repositories — injectDoctrine\DBAL\Connectioninstead
src/Core/Repository/AbstractObjectModelRepository.phpsrc/Adapter/Order/Repository/OrderRepository.php
- CQRS Component — handlers inject repositories to fulfil commands/queries