switon / orm
Typed entities, repository-first persistence, relation loading, and shard-aware routing for Switon Framework
v1.0.0
2026-06-06 13:43 UTC
Requires
- php: >=8.3
- switon/binding: ^1.0
- switon/core: ^1.0
- switon/db: ^1.0
- switon/di: ^1.0
- switon/event: ^1.0
- switon/id: ^1.0
- switon/invocation: ^1.0
- switon/principal: ^1.0
- switon/query: ^1.0
- switon/sharding: ^1.0
- switon/validation: ^1.0
Requires (Dev)
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^2.0
- switon/invoker: ^1.0
- switon/testing: ^1.0
Suggests
- switon/orm-codegen: Development: entity:make and repository scaffolding from database metadata
README
Switon's entity mapping layer for attribute-driven models, repository queries, relations, lifecycle events, sharding-aware writes, and pagination boundaries.
Highlights
- Relationship mapping:
Entityclasses declare linked records through attributes. - Relationship loading:
RelationManagerhandles eager and lazy loading. - Attribute-based mapping:
Entityclasses declare tables, columns, IDs, and constraints through attributes. - Runtime-only properties:
#[Transient]keeps temporary fields out of persistence. - Repository queries:
RepositoryInterfaceandRepositorycover filters, lookup, relation-backed reads, and pagination. - Safe write flow: create and update paths include fill, validation, events, and
#[Transactional]support. - Shard-safe writes: writes resolve a single shard before they run.
Installation
composer require switon/orm
Quick Start
use Switon\Core\Attribute\Autowired; use Switon\Orm\Attribute\{Id, Table, Transient}; use Switon\Orm\Entity; use Switon\Orm\Page; use Switon\Orm\Repository; #[Table('users')] class User extends Entity { #[Id] public ?int $id = null; public string $name; public string $email; #[Transient] public ?string $displayName = null; } final class UserRepository extends Repository { } final class UserController { #[Autowired] protected UserRepository $userRepository; public function indexAction(Page $page): \Switon\Query\Paginator { return $this->userRepository->paginate($page); } }
Docs: https://docs.switon.dev/latest/orm
License
MIT.