In meiner Silvers 3.4 Umgebung verwendet wird, habe ich eine Reihe von verschiedenen Modellen, die ein Bild angehängt haben, zum Beispiel:finden, ob ein Bild irgendwo
BlogPost
has_one
Image
(via Silvers/Blog)Widget
has_one
Image
(via Silvers/widgets)MyWidget
has_one
Image
(benutzerdefinierte Modul)
Ich möchte ein Bild verhindern z. ID 123 wird im CMS-Admin gelöscht, wenn es in einem der obigen Fälle verwendet wird (als Beispiel - dies sollte systemweit sein).
Gibt es eine Möglichkeit, dass ich alle Modelle überprüfen kann, die ein verwandtes Bild auf einmal haben, vielleicht über eine Image belongs_many_many
Suche oder etwas?
Dank Russell. Angenommen, ich weiß nicht, wie viele Modelle ein Image haben werden, kann ich dies mit dem gleichen Konzept erreichen, wie du es beschrieben hast, oder müsste ich alle Beziehungen kennen, damit dieser Ansatz funktionieren kann? –
Ich habe die "Lösung" nach Ihrer Frage aktualisiert. Hinweis: Die obige Lösung geht davon aus, dass 'Image' has_one für alle Klassen, die eine haben,' Image' genannt wird. Wenn Sie 'Image' subclassiert haben, müssen Sie den Aufruf von' DataObject :: hasOneComponent() 'beispielsweise mit' in_array() 'ändern. – theruss
Sie können das Löschen nicht verhindern, indem Sie nicht 'parent :: onBeforeDelete(); 'aufrufen. Dies in einer 'DataExtension' zu tun, hat keinerlei Auswirkungen. Selbst dies in der Klasse selbst zu tun wäre schlecht, da es einen "broken onBeforeDelete" -Fehler auslösen würde. Ich denke, es wäre besser, stattdessen die 'canDelete'-Berechtigung zu überschreiben? Oder wirf einen Fehler in 'onBeforeDelete', wenn du hardcore gehen willst. – bummzack