core
core copied to clipboard
Deleting an item causes inconistend database state, when referenced in other Item
Checklist before I submit this issue report
I confirm that:
- [x] I have tested this with the latest version available
- [x] I have read documentation @ http://metamodels.readthedocs.org/en/ or http://metamodels.readthedocs.org/de/
- [x] I have checked the Contao community forums for references https://community.contao.org/
- [x] I have checked existing issues for duplicates and found none @ https://github.com/MetaModels/core/issues?q=is%3Aissue
My environment is:
(Please fill in the actual values from your environment - check Contao Manager or use composer show)
| Key | Value | Comments |
|---|---|---|
| PHP version: | 7.2.2 | |
| Contao version: | 4.4.41 | |
| MetaModels version: | 2.1.4 | |
| Installed MetaModels packages: | All | |
| DCG version: | 2.1.3 |
Issue description
The database is inconsistend when you delete an item that is referenced in another item. There is no "delete cascade", so the relation is still stored in tl_metamodel_tag_relation.
Steps to reproduce
Have an MetaModel A and B, where A has a tags attribute that references B. Delete one item of MetaModel B that is referenced in an Item of MetaModel A.
Describe the behaviour of the application
The relation in tl_metamodel_tag_relation is not deleted.
Describe the expected behaviour
The relation in tl_metamodel_tag_relation is deleted
This is currently a known limitation.
MetaModels has no, as Contao itself, foreign key definitions and hence no enforcement of these.
This will be addressed in MM 3.0 earliest as it requires rewrites in the core DB management.
Is it possible to add an event in the delete method of the MetaModels DCGeneral Driver https://github.com/MetaModels/core/blob/master/src/DcGeneral/Data/Driver.php#L131 before deleting the item itself?
for DcGeneral there is such an event: PreDeleteModelEvent
However, bear in mind that this does NOT get triggered when deleting via API.