chameleon-system-private/id-rewrite-bundle
There is no license information available for the latest version (8.0.45) of this package.
8.0.45
2025-06-16 13:34 UTC
Requires
- chameleon-system/chameleon-base: ~8.0.0
- symfony/uid: ^6.4
- 8.0.x-dev
- 8.0.45
- 8.0.44
- 8.0.43
- 8.0.42
- 8.0.41
- 8.0.40
- 8.0.39
- 8.0.38
- 8.0.37
- 8.0.36
- 8.0.35
- 8.0.34
- 8.0.33
- 8.0.32
- 8.0.31
- 8.0.30
- 8.0.29
- 8.0.28
- 8.0.27
- 8.0.26
- 8.0.25
- 8.0.24
- 8.0.23
- 8.0.22
- 8.0.21
- 8.0.20
- 8.0.19
- 8.0.18
- 8.0.17
- 8.0.16
- 8.0.15
- 8.0.14
- 8.0.13
- 8.0.12
- 8.0.11
- 8.0.10
- 8.0.9
- 8.0.8
- 8.0.7
- 8.0.6
- 8.0.5
- 8.0.4
- 8.0.3
- 8.0.2
- 8.0.1
- 7.1.x-dev
- 7.1.138
- 7.1.137
- 7.1.136
- 7.1.135
- 7.1.134
- 7.1.133
- 7.1.132
- 7.1.131
- 7.1.130
- 7.1.129
- 7.1.128
- 7.1.127
- 7.1.126
- 7.1.125
- 7.1.124
- 7.1.123
- 7.1.122
- 7.1.121
- 7.1.120
- 7.1.119
- 7.1.118
- 7.1.117
- 7.1.116
- 7.1.115
- 7.1.114
- 7.1.113
- 7.1.112
- 7.1.111
- 7.1.110
- 7.1.109
- 7.1.108
- 7.1.107
- 7.1.106
- 7.1.105
- 7.1.104
- 7.1.103
- 7.1.102
- 7.1.101
- 7.1.100
- 7.1.99
- 7.1.98
- 7.1.97
- 7.1.96
- 7.1.95
- 7.1.94
- 7.1.93
- 7.1.92
- 7.1.91
- 7.1.90
- 7.1.89
- 7.1.88
- 7.1.87
- 7.1.86
- 7.1.85
- 7.1.84
- 7.1.83
- 7.1.82
- 7.1.81
- 7.1.80
- 7.1.79
- 7.1.78
- 7.1.77
- 7.1.76
- 7.1.75
- 7.1.74
- 7.1.73
- 7.1.72
- 7.1.71
- 7.1.70
- 7.1.69
- 7.1.68
- 7.1.67
- 7.1.66
- 7.1.65
- 7.1.64
- 7.1.63
- 7.1.62
- 7.1.61
- 7.1.60
- 7.1.59
- 7.1.58
- 7.1.57
- 7.1.56
- 7.1.55
- 7.1.54
- 7.1.53
- 7.1.52
- 7.1.51
- 7.1.50
- 7.1.49
- 7.1.48
- 7.1.47
- 7.1.46
- 7.1.45
- 7.1.44
- 7.1.43
- 7.1.42
- 7.1.41
- 7.1.40
- 7.1.39
- 7.1.38
- 7.1.37
- 7.1.36
- 7.1.35
- 7.1.34
- 7.1.33
- 7.1.32
- 7.1.31
- 7.1.30
- 7.1.29
- 7.1.28
- 7.1.27
- 7.1.26
- 7.1.25
- 7.1.24
- 7.1.23
- 7.0.22
- 7.0.21
- dev-65797-paypal-checkout-7.1.x
- dev-65797-paypal-button-integration
- dev-66480-paypal-button-integration-wip
- dev-main
- dev-64992-campaign-tracking-bundle
- dev-64817-update-tag-manager-bundle
README
Adds the ability to do one-time rewriting of IDs in the database.
This bundle is largely centered around the rewrite_ids console command, which executes the ID-rewriting.
Usage:
rewrite_ids [options]
Options:
--dry-run Do not change anything, just show what would be changed
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Defining ID-Rewriting Rules
This bundle only provides the 'plumbing' for rewriting IDs. It assumes that a project using it provides
one or multiple RewritableIdFinder: A service implementing RewritableIdFinderInterface tagged with the
chameleon_system.id_rewrite.rewritable_id_finder tag.
<service class="My\Vendor\MyIdFinder" id="my_vendor.my_id_finder">
<argument type="service" id="database_connection" />
<tag name="chameleon_system.id_rewrite.rewritable_id_finder" priority="10" />
</service>
use ChameleonSystem\IdRewriteBundle\Finder\RewritableIdFinderInterface;
use ChameleonSystem\IdRewriteBundle\Finder\RewritableIdListDataModel;
use ChameleonSystem\IdRewriteBundle\Finder\RewritableIdDataModel;
class MyIdFinder implements RewritableIdFinderInterface {
public function findRewritableIds(): RewritableIdListDataModel {
return RewritableIdListDataModel::forTable('my_table', [
new RewritableIdDataModel('old_id', 'new_id'),
]);
}
}
Architecture
High-Level overview of how this bundle rewrites IDs:
RewritableIdFinder's find IDs that can be rewritten. The result of these is a list of "The ID on this table can change from X -> Y"IdMigrationService::getChangesForIdMigrationtakes such a change and usesForeignKeyDetectorsin order to find all columns that must be changed in order for the ID change to be sucessful. It then converts the ID change to a list of changeSets, where one changeset refers to a singular database query. Most times, a singular ID change will result in multiple changesets and thus multiple database queries.IdMigrationService::applyChangestakes a singular changeset and applies it to the database.RewriteIdsCommandwires these services up such that each ID change from a finder will be converted to a list of changesets and then applied to the database.