Vorhandenen Datentyp mit Yesod's Persistent speichern

9

Alle Tutorials und Referenzen, die ich über Persistent finden konnte, beschreiben sehr detailliert, wie Persistent automatisch einen neuen Datentyp, ein neues Schema, eine neue Migration usw. aus einer einzigen Definition in seiner DSL erstellen kann. Ich konnte jedoch keine Erklärung finden, wie Persistent mit bereits vorhandenen Datentypen umgehen kann.

Ein Beispiel: Angenommen, ich habe bereits ein Haskell-Modul für eine Spiellogik. Es enthält einen Aufnahmetyp für einen Spieler. (Es soll durch Linsen verwendet werden, daher die Unterstriche.)

%Vor%

Frage: Was ist der kanonische Weg, einen solchen Typ in einer Datenbank mit Persistent zu speichern? Gibt es eine Klasse, die ich implementieren kann? Oder sollte ich am besten einen neuen Typ durch Persistent definieren, z. B.

%Vor%

und dann manuell zwischen diesen Typen zuordnen?

%Vor%     
Lemming 25.01.2015, 10:33
quelle

2 Antworten

1

Meine Lösung für dieses Problem bestand darin, einen neuen Typ über Yesods mkPersist hinzuzufügen und manuell zwischen diesen zu marshallen.

config/models :

%Vor%

Marshalling.hs :

%Vor%

Ein möglicher Vorteil ist, dass Sie Felder in Ihrer Tabelle haben können, die im internen Datensatz nicht benötigt werden. In meinem Beispiel war es nützlich, ein Erstellungsdatum an den Player anzuhängen. Dies wurde jedoch nur in der Web-Interface-Ebene verwendet. Es wurde nie in der internen Spiellogik verwendet, die den Player -Typ definiert hat. Aufgrund des manuellen Marshalling konnte ich dieses Feld trotzdem zur selben Datenbanktabelle hinzufügen.

    
Lemming 17.08.2015, 21:52
quelle
1

Von: Ссылка

%Vor%

Die derivePersistField -Funktion ist die Vorlage, die Haskell-Magie, die es funktioniert.

Beachten Sie, dass Sie das derivePersistField -Thing in einer separaten Datei zu dem mkPersist machen müssen, um einen TH-Phasenfehler zu vermeiden.

    
Erik de Castro Lopo 24.02.2015 07:50
quelle

Tags und Links