Yesod löscht die Kaskade

8

Nach Ссылка wurde vor ein paar Jahren eine DeleteCascade typeclass hinzugefügt. Ich kann nur annehmen, dass dies zu den Modellen hinzugefügt werden soll. Nach dem Einrichten meiner Modelle Konfiguration wie folgt:

%Vor%

meine Bewerbung ist in Ordnung. aber das DB-Schema ist unverändert und das Löschen wird auch nicht von der Anwendung kaskadiert. Soll ich es nur (schaudern) manuell machen? Gibt es einen besseren Weg?

Ich benutze das Yesod-Gerüst (Application.hs, Foundation.hs, Settings.hs, ...)

    
abesto 16.09.2012, 07:24
quelle

2 Antworten

8

Unter Verwendung der vorhandenen Antworten brauchte ich etwas Zeit, um herauszufinden, wie die Löschkaskade verwendet werden kann. Als Anfänger in Jessod hatte ich keinen Überblick über Jessod.

Um eine funktionierende Löschkaskade zu erhalten, müssen Sie nichts im Modell ändern. Angenommen, Ihre Entitätsdatei sieht wie folgt aus und Sie möchten Entry löschen.

%Vor%

Sie müssen diese Entitätsdatei nicht ändern.

Der Code, von dem aus Sie die Entitäten führen, normalerweise in Model.hs , sieht so aus.

%Vor%

Fügen Sie die mkDeleteCascade hinzu, um die DeleteCascades-Instanzen für Ihre Entitäten zu erhalten.

%Vor%

Wenn Sie Ihren Eintrag löschen möchten, zB im postDeleteEntryR Handler, müssen Sie deleteCascade oder deleteCascadeWhere anstelle von delete verwenden.

%Vor%

Die Verwendung von delete hat denselben Effekt wie zuvor.

    
Bastian Holst 12.07.2014, 10:40
quelle
4

Um DeleteCascade zu nutzen, müssen Sie entweder deleteCascade oder deleteCascadeWhere verwenden. Diese funktionieren nur, wenn DeleteCascade-Instanzen für Ihre Typen verfügbar sind. Der einfachste Weg, um diese zu erhalten, ist mit der mkDeleteCascade-Funktion.

    
Michael Snoyman 16.09.2012 09:28
quelle

Tags und Links