Storage Configuration
Configure audit storage, including multi-database setups
This guide covers audit storage configuration, including multi-database setups.
ποΈ Default Setupβ
By default, audits are stored in the same database as your entities using the default entity manager:
dh_auditor:
providers:
doctrine:
storage_services:
- '@doctrine.orm.default_entity_manager'
This provides transactional integrity: audit entries are part of the same database transaction as entity changes.
π Table Namingβ
Audit tables are named: {prefix}{entity_table}{suffix}
| Option | Default | Example (entity: users) |
|---|---|---|
table_prefix | '' | β users_audit |
table_suffix | '_audit' | β users_audit |
dh_auditor:
providers:
doctrine:
table_prefix: 'audit_'
table_suffix: ''
Result: users β audit_users
ποΈ Multi-Database Setupβ
Store audits in a separate database from your entities.
CAUTION
Warning: Atomicity
Using separate databases breaks transactional integrity:
- Entity changes and audits are in different transactions
- If entity operation succeeds but audit fails β missing audit
- If entity operation fails but audit succeeds β orphan audit
Only use this when the trade-offs are acceptable.
Configurationβ
1οΈβ£ Configure Multiple Entity Managersβ
# config/packages/doctrine.yaml
doctrine:
dbal:
default_connection: default
connections:
default:
url: '%env(DATABASE_URL)%'
audit:
url: '%env(AUDIT_DATABASE_URL)%'
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
App:
type: attribute
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
audit:
connection: audit
# No mappings needed - audit tables are created dynamically