我想将PersistList值添加到具有默认值的用户实体中。我的模型文件如下所示。和Models.hs
文件:
User
ident Text
password Text Maybe
UniqueUser ident
perms [Privileges] default=[PrvDemoOne]
deriving Typeable
data Privileges =
PrvDemoOne -- ^ what can be demo one...
| PrvDemoTwo -- ^ what can be demo two...
deriving (Show,Read,Eq)
derivePersistField "Privileges"
代码会编译,但是当向表中添加新用户时,请保存一个空数组,而不是具有默认值的数组。
1 | google-uid:223344555661778819911 || []
问题是如何保存默认值的列?
答案 0 :(得分:0)
您读过this吗? default
字段的值实际上与Haskell方面本身没有任何关系,而是通过传递它来设置DBMS的“默认值”描述。在这种情况下,[PrvDemoOne]
被直接传递到SQLite,它将被解释为乱码(因为它不是有效的SQL表达式),因此可以忽略它,也可以将其视为(这里似乎是这种情况)根本没有设置默认值。
如果您想要“ Haskell方面”的默认值,则应为此创建一个函数,例如
defaultUser :: Text -> Maybe Text -> User
defaultUser i maybePw = User { ident = i, password = maybePw, perms = [PrvDemoOne] }
如果要使用SQL默认值,则需要为要表示的值编写相应的SQL表达式。
在与Haskell不相关的注释上:SQL中表示列表(或本例中的集合)的“正常”方式是通过关系,因此您通常会有多对多的关系映射用户而不是列表字段。