【问题标题】:default values for PersistList on SQLite - YesodSQLite 上 PersistList 的默认值 - Yesod
【发布时间】:2019-05-05 17:49:20
【问题描述】:

我想将 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||[]

问题是如何使用默认值保存列?

【问题讨论】:

    标签: haskell yesod persistent


    【解决方案1】:

    你读过this吗? default 字段的值与 Haskell 端本身没有任何关系,它被传递以设置 DBMS 的“默认值”描述。在这种情况下,[PrvDemoOne] 被直接传递给 SQLite,它会将其解释为胡言乱语(因为它不是有效的 SQL 表达式)所以这要么被忽略,要么(这里似乎是这种情况)被视为你没有完全设置默认值。

    如果你想要一个“Haskell side”默认值,你应该为此创建一个函数,即类似

    defaultUser :: Text -> Maybe Text -> User
    defaultUser i maybePw = User { ident = i, password = maybePw, perms = [PrvDemoOne] }
    

    如果您想要 SQL 端默认值,则需要为您尝试表示的值编写相应的 SQL 表达式。

    关于非 Haskell 相关说明:在 SQL 中表示列表(或本例中的集合!)的“正常”方式是通过关系,因此您通常会有一个多对多关系映射用户他们的权限而不是列表字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-18
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 2012-10-31
      相关资源
      最近更新 更多