在 Haskell/Persistent 中使用没有 ID 列的 SQL table
Using an SQL table without an ID column in Haskell/Persistent
我想使用 现有 数据库 Persistent 使用此简化模式:
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Entity sql=entities
deriving Show
EntityLink sql=entity_links
sourceId EntityId
targetId EntityId
deriving Show
|]
entities
table 有一个 id
列,这很好。但是,entity_links
table 没有,我也不想加。相反,它具有主键 (source_id, target_id)
。每当我想插入一个 EntityLink
时,我都会收到此运行时错误:
SqlError {sqlState = "42703", sqlExecStatus = FatalError, sqlErrorMsg = "column \"id\" does not exist", sqlErrorDetail = "", sqlErrorHint = ""}
这是我在代码中插入 EntityLink
的方法,给定有效的 sourceId
和 targetId
:
insert $ EntityLink { entityLinkSourceId = sourceId
, entityLinkTargetId = targetId
}
如何为 EntityLink
类型禁用 Persistent 中的 id
列?
您可以使用Primary
并指定属于主键的列。喜欢:
EntityLink sql=entity_links
sourceId EntityId
targetId EntityId
<b>Primary sourceId targetId</b>
deriving Show
我想使用 现有 数据库 Persistent 使用此简化模式:
share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
Entity sql=entities
deriving Show
EntityLink sql=entity_links
sourceId EntityId
targetId EntityId
deriving Show
|]
entities
table 有一个 id
列,这很好。但是,entity_links
table 没有,我也不想加。相反,它具有主键 (source_id, target_id)
。每当我想插入一个 EntityLink
时,我都会收到此运行时错误:
SqlError {sqlState = "42703", sqlExecStatus = FatalError, sqlErrorMsg = "column \"id\" does not exist", sqlErrorDetail = "", sqlErrorHint = ""}
这是我在代码中插入 EntityLink
的方法,给定有效的 sourceId
和 targetId
:
insert $ EntityLink { entityLinkSourceId = sourceId
, entityLinkTargetId = targetId
}
如何为 EntityLink
类型禁用 Persistent 中的 id
列?
您可以使用Primary
并指定属于主键的列。喜欢:
EntityLink sql=entity_links
sourceId EntityId
targetId EntityId
<b>Primary sourceId targetId</b>
deriving Show