AbstractRepository Class
TheAbstractRepository class provides the foundation for all repositories:
framefox/core/orm/abstract_repository.py:20
Entity Manager Access
Repositories automatically access the request-scopedEntityManager:
framefox/core/orm/abstract_repository.py:38
Creating a Repository
Create a repository by extendingAbstractRepository:
Register with Dependency Injection
Register your repository with Framefox’s service container:CRUD Operations
find(id) - Find by ID
Retrieve an entity by its primary key:
framefox/core/orm/abstract_repository.py:42
Usage:
find_all() - Get All Records
Retrieve all entities of a type:
framefox/core/orm/abstract_repository.py:54
Usage:
find_by() - Find with Criteria
Retrieve entities based on specific criteria with optional ordering, limiting, and pagination:
framefox/core/orm/abstract_repository.py:64
Usage:
find_one_by() - Find Single Record
Retrieve the first entity matching criteria:
framefox/core/orm/abstract_repository.py:92
Usage:
Save Operations
To save (create or update) entities, use theEntityManager directly:
Delete Operations
Delete entities using theEntityManager:
Custom Repository Methods
Extend repositories with custom methods for your specific needs:Advanced Custom Methods
For complex queries, use the QueryBuilder:Query Builder Integration
Repositories provide access to theQueryBuilder for complex queries:
framefox/core/orm/abstract_repository.py:106
Usage:
Transaction Support
Use transactions for multiple operations:Best Practices
- One Repository per Entity: Create a dedicated repository for each main entity
- Encapsulate Business Logic: Put domain-specific queries in custom methods
- Use Descriptive Method Names: Name methods clearly (e.g.,
find_active_usersnotget_users) - Return Type Hints: Always specify return types for better IDE support
- Handle None Results: Check for
Nonewhen usingfind()orfind_one_by() - Use Transactions: Wrap multiple operations in transactions for consistency
- Leverage QueryBuilder: Use QueryBuilder for complex queries instead of raw SQL
Complete Example
Next Steps
Query Builder
Build complex queries fluently
Entities
Learn more about entity models