如何在Persistent中定义组合键

Uri*_*olz 13 haskell persistent yesod

如何向Persistent声明我有一个表,其主键是两个字段的组合?

例如,假设我有一个包含first_name和last_name的表,那么在SQL语法中我需要类似的东西:

CONSTRAINT pk_PersonID PRIMARY KEY (first_name,last_name)
Run Code Online (Sandbox Code Playgroud)

谢谢,

Mik*_*kel 6

您可以Primary <field1> <field2>按照以下代码使用语法。

PrimaryCompositeWithOtherNullableFields
    foo String       maxlen=20
    bar String       maxlen=20
    baz String Maybe
    Primary foo bar   -- THIS LINE --
    deriving Eq Show
    enter code here
Run Code Online (Sandbox Code Playgroud)

上面的代码来自https://github.com/yesodweb/persistent/blob/master/persistent-test/src/CompositeTest.hs#L74中的一项测试

该Wiki页面介绍了用于持久定义模型的不同语法。它确实应该成为Yesod书的一部分。


JP *_*mau 3

请参阅http://www.yesodweb.com/book/persistent 的“唯一性”部分

Person
    firstName String
    lastName String
    age Int
    PersonName firstName lastName
    deriving Show
Run Code Online (Sandbox Code Playgroud)

这定义了由名字和姓氏组成的唯一键。

  • 浏览本次作品的您可能还对土拨鼠感兴趣。其 API 的许多部分与 Persistent 类似,但它有一些额外的功能,包括复合键。此示例 https://github.com/lykahb/groundhog/blob/master/examples/keys.hs 显示一列自然键,但如果您向唯一约束添加更多列,则很容易使它们复合。 (2认同)