Automatisches löschen von Datensätzen in Kindtabellen¶
Werden in MetaModels Tabellen als Kindtabellen verknüpft, so werden die (Kind)Datensätze aktuell nicht automatisch gelöscht, wenn der entsprechende Elterndatensatz gelöscht wird. Der DC_General unterstützt zwar die Funktion „deep delete“, aber diese ist in MM noch nicht per Konfiguration für die eigenen Tabellen aktivierbar.
Diese kann aber mit einer eigenen DCA-Konfiguration je Eltern-Kind-Beziehung erstellt werden. Das bedeutet auch, dass das Löschen Eltern-Kind-Kind-Beziehungen aktiviert werden kann. Je Stufe ist eine Datei anzulegen die entsprechend alle Ebenen „nach unten“ beinhalten muss.
Das folgende Beispiel ist für die zweistufige Hierarchie der MM-Tabellen mm_parent mit mm_child sowie mm_child_child. Die DCA-Dateien müssen je nach Contao-Version in die entsprechenden Ordner - bei Contao 4.9 z. B. in contao/dca (siehe Contao Handbuch).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <?php
// contao/dca/mm_parent.php
$GLOBALS['TL_DCA']['mm_parent'] = [
'dca_config' => [
'data_provider' => [
'default' => [
'source' => 'mm_parent'
],
'mm_child' => [
'source' => 'mm_child'
],
'mm_child_child' => [
'source' => 'mm_child_child'
],
],
'childCondition' => [
[
'from' => 'mm_parent',
'to' => 'mm_child',
'setOn' => [
[
'to_field' => 'pid',
'from_field' => 'id',
],
],
'filter' => [
[
'local' => 'pid',
'remote' => 'id',
'operation' => '=',
],
],
'inverse' => [
[
'local' => 'pid',
'remote' => 'id',
'operation' => '=',
],
]
],
[
'from' => 'mm_child',
'to' => 'mm_child_child',
'setOn' => [
[
'to_field' => 'pid',
'from_field' => 'id',
],
],
'filter' => [
[
'local' => 'pid',
'remote' => 'id',
'operation' => '=',
],
],
'inverse' => [
[
'local' => 'pid',
'remote' => 'id',
'operation' => '=',
],
]
],
],
]
];
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <?php
// contao/dca/mm_child.php
$GLOBALS['TL_DCA']['mm_child'] = [
'dca_config' => [
'data_provider' => [
'default' => [
'source' => 'mm_child'
],
'mm_child_child' => [
'source' => 'mm_child_child'
],
],
'childCondition' => [
[
'from' => 'mm_child',
'to' => 'mm_child_child',
'setOn' => [
[
'to_field' => 'pid',
'from_field' => 'id',
],
],
'filter' => [
[
'local' => 'pid',
'remote' => 'id',
'operation' => '=',
],
],
'inverse' => [
[
'local' => 'pid',
'remote' => 'id',
'operation' => '=',
],
]
],
],
]
];
|
Leider wird beim Frontend-Editing (FEE) die Relation mit Kindtabellen noch nicht unterstützt, so dass hier eine eigene Löschroutine erstellt werden muss. Zum Triggern könnte z. B. der PostDeleteModelEvent des DC_G eingesetzt werden. Mit der ID des gelöschten Model können alle Kinddatensätze mit der selben PID gefunden und gelöscht werden.
Erfolgt das Editieren bzw. das Löschen eines MM-Items über ein Formular, muss dort eine Löschroutine mit eingebaut werden.