Yesod持久化:仅具有id行的SQLite表

Yesod持久化:仅具有id行的SQLite表,sqlite,haskell,yesod,persistent,Sqlite,Haskell,Yesod,Persistent,我的模型如下所示: TestGroup TestPerson firstName Text lastName Text testGroupId TestGroupId TestObject objectName Text testGroupId TestGroupId 在本例中,TestGroup表中唯一的内容是testGroupId。多个测试人员可以在一个组中一对多,一个组可以有多个测试对象,也可以是一对多 以下代码编译并运行,但产生SQLite错误:

我的模型如下所示:

TestGroup
TestPerson
    firstName Text
    lastName Text
    testGroupId TestGroupId
TestObject
    objectName Text
    testGroupId TestGroupId
在本例中,TestGroup表中唯一的内容是testGroupId。多个测试人员可以在一个组中一对多,一个组可以有多个测试对象,也可以是一对多

以下代码编译并运行,但产生SQLite错误:

postAddTestPersonR :: Handler Value
postAddTestPersonR = do
    newTestPerson <- parseJsonBody :: Handler (Result TestPerson)
    case newTestPerson of
      Success s -> runDB $ do
        newTestGroup <- insert $ TestGroup
        _ <- insert $ TestPerson (firstName s) (lastName s) newTestGroup
        return $ object ["message" .= "it worked"]
      Error e -> return $ object ["message" .= e]
如果我打开数据库并以这种方式手动添加它,它就会工作,我会得到一个新的ID号:

INSERT INTO test_group VALUES (null);

我是否应该尝试在原始SQL中执行此操作,或者是否有一种方法可以通过persist解决此问题。一个简单的解决方案就是在TestGroup中添加一个虚拟变量,并插入$TestGroup,但这有点不太妥当,我想知道是否有办法解决这个问题。

这是Yesod的内部问题。问题已经解决:

除了使用虚拟变量,我不知道现在是否有其他解决方案。有人建议我制造一个问题
INSERT INTO test_group VALUES (null);