SQLite 上 PersistList 的默认值 - Yesod
default values for PersistList on SQLite - Yesod
我想将 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"
代码编译但当新用户添加到 table 时保存一个空数组而不是具有默认值的数组。
1|google-uid:223344555661778819911||[]
问题是如何使用默认值保存列?
你读过this了吗? default
字段的值实际上与 Haskell 端本身没有任何关系,它被传递来设置 "default value" 描述您的 DBMS。在这种情况下 [PrvDemoOne]
被直接传递给 SQLite,它将把它解释为乱码(因为它不是一个有效的 SQL 表达式)所以这要么被忽略要么(似乎是这里的情况)被视为您根本没有设置默认值。
如果你想要一个 "Haskell side" 默认值,你应该为此创建一个函数,比如
defaultUser :: Text -> Maybe Text -> User
defaultUser i maybePw = User { ident = i, password = maybePw, perms = [PrvDemoOne] }
如果您想要 SQL 侧默认值,您需要为您要表示的值编写相应的 SQL 表达式。
关于非 Haskell 相关说明:'normal' 在 SQL 中表示列表(或本例中的集合!)的方法是通过关系,所以你' d 通常有一个多对多关系将用户映射到他们的权限而不是列表字段。
我想将 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"
代码编译但当新用户添加到 table 时保存一个空数组而不是具有默认值的数组。
1|google-uid:223344555661778819911||[]
问题是如何使用默认值保存列?
你读过this了吗? default
字段的值实际上与 Haskell 端本身没有任何关系,它被传递来设置 "default value" 描述您的 DBMS。在这种情况下 [PrvDemoOne]
被直接传递给 SQLite,它将把它解释为乱码(因为它不是一个有效的 SQL 表达式)所以这要么被忽略要么(似乎是这里的情况)被视为您根本没有设置默认值。
如果你想要一个 "Haskell side" 默认值,你应该为此创建一个函数,比如
defaultUser :: Text -> Maybe Text -> User
defaultUser i maybePw = User { ident = i, password = maybePw, perms = [PrvDemoOne] }
如果您想要 SQL 侧默认值,您需要为您要表示的值编写相应的 SQL 表达式。
关于非 Haskell 相关说明:'normal' 在 SQL 中表示列表(或本例中的集合!)的方法是通过关系,所以你' d 通常有一个多对多关系将用户映射到他们的权限而不是列表字段。