2017-02-16 3 views
0

Kann ich eine benutzerdefinierte Spalte in Slick haben (Ich möchte eine Fallklasse als eine Spalte, die JSON darstellt).Benutzerdefinierte Spalte in Slick

case class Segment(isNative: Option[Boolean], origin: Option[List[String]],whitelist: Option[Whitelist]) 

def seg = column[Option[Segment]]("segment") 

Antwort

1

Sicher können Sie - das ist die Frage der benutzerdefinierten Zuordnung. Hier ist, wie es aussieht, wenn Sie möchten, String in db speichern:

implicit val segmentColumnType = MappedColumnType.base[Segment, String](
    segment => ???, // logic here to convert Segment to JSON string 
    string => ??? // logic here to convert JSON string to Segment case class 
) 

Dann definieren Sie Ihre Spalte wie folgt (das ist eigentlich Ihr Code):

def seg = column[Option[Segment]]("segment") 

Sie können oben verwenden dann sowohl in Ergebnisse und Anfragen z dies wie:

MyTable 
     .filter(_.segment === Segment(Some(true), None, None) 
     .result 

daran müssen Sie halten einfach diese implizite (segmentColumnType) an Orten im Umfang haben, wenn Sie dieses Gespräch (Spaltendefinition, Abfragen usw.) verwenden.

Verwandte Themen