core icon indicating copy to clipboard operation
core copied to clipboard

Deleting an item causes inconistend database state, when referenced in other Item

Open bezin opened this issue 6 years ago • 3 comments

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

bezin avatar Jul 29 '19 11:07 bezin

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.

discordier avatar Jul 29 '19 12:07 discordier

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?

bezin avatar Jul 29 '19 12:07 bezin

for DcGeneral there is such an event: PreDeleteModelEvent

However, bear in mind that this does NOT get triggered when deleting via API.

discordier avatar Jul 29 '19 13:07 discordier