说我有以下关系:
Section
name Text
UniqueSection name
Subject
name Text
UniqueSubject name
Faculty
name Text
UniqueFaculty name
Assignment
section SectionId
faculty FacultyId
subject SubjectId
UniqueAssignment section subject
处理程序:
postNewAssignmentR :: Handler Html
postNewAssignmentR = do
-- don't know what to use instead xxxField for SectionId/FacultyId/SubjectId
sec <- runInputPost $ ireq xxxField "section"
fac <- runInputPost $ ireq xxxField "faculty"
sub <- runInputPost $ ireq xxxField "subject"
runDB $ insert $ Assignment sec fac sub
setMessage "Created new Assignment"
redirect AssignmentsR
如果&#34;部分&#34;,&#34; faculty&#34;,&#34; subject&#34;下拉输入及其相应的ID作为值(在我们从runInputPost得到的文本中),如何将它们转换为sectionId,facultyId,等等? 或者我应该采用任何其他方法来插入外键?
答案 0 :(得分:1)
我刚刚意识到你没有使用Yesod生成表单,所以我下面的原始建议可能无效。您可以将输入值设为Int
,然后使用fKey = Key $ PersistInt64 intReturnValue
不确定以下代码是否适合您的情况:
您可以使用selectField
获取部分名称列表,然后在下拉列表中填充它 - 值应自动映射到ID。我不使用输入表格,但猜测这样的事情应该有效:
<*> ireq (selectField sections) "Section Name"
where
sections = do
entities <- runDB $ selectList [] [Asc SectionName]
optionsPairs $ map (\e -> (sectionName $ entityVal e, entityKey e)) entities