【问题标题】:Loopback embedsMany Helper methods don't workLoopback embedsMany Helper 方法不起作用
【发布时间】:2016-12-17 05:15:24
【问题描述】:

我有这两个模型:

学生

{
    "name": "student",
    "plural": "students",
    "base": "User",
    "idInjection": false,
    "options": {
        "validateUpsert": true
    },
    "relations": {
        "test": {
            "type": "embedsMany",
            "model": "test",
            "property": "mytest",
            "options": {
                "validate": true,
                "forceId": false
            }
    }
}

测试

{
    "name": "test",
    "base": "Model",
    "idInjection": true,
    "options": {
        "validateUpsert": true
    },
    "properties": {
        "text": {
            "type": "string",
            "required": true
        }
    }
}

当我尝试创建新测试时出现此错误

Error: Invalid reference: undefined

我以这种方式创建测试:

Student.js

studentInstance.test.add({text : "something "})

我做错了什么?

更新

在 embedsMany 中删除

在测试中更新 id。

Student.js

Student.show = function(email, cb) {


        Student.findById(email,function(err, student) {

            ...

            var tmp = student.mytest;

            for (var i = 0; i < tmp.length; i++) {
                student.test.destroy(tmp[i].id);
            }

        })

               ...

    }

我试过了

destroy 无法正常工作,并不总是删除数据

remove 显示此错误

Error: Invalid reference: undefined
    at EmbedsMany.remove

更新

添加了一个db的例子

{
    "_id": "value",
    "property1": "value",
    .
    .

    "mytest": [
        {
            "text": "something",
            "creation": {
                "$date": "2016-08-23T14:31:44.678Z"
            },
            "id": "d738253472876b17feb4b46b"
        }
    ]
}

【问题讨论】:

    标签: javascript loopbackjs strongloop


    【解决方案1】:

    您没有test 模型。

    test.json 中,您将其名称定义为notification => "name": "notification",

    更新

    要构建(不持久化)嵌入式实例,请使用studentInstance.test.build({text : "something "})

    以及创建(持久化)请使用studentInstance.test.create({text : "something "})

    【讨论】:

    • 感谢您的回答。这不是错误吗。我错了复制/粘贴。在项目中,名称都可以。
    • 感谢这项工作。现在我有同样的问题,删除我用 removeunsetdestroyById 尝试过的测试
    • @Phan 因为您的嵌入式模型没有 id (idInection),所以您不能使用 destroyById。您需要手动操作(如普通对象)或将 id 添加到嵌入式模型
    • 感谢您的所有帮助。我再次遇到删除问题。我更新了问题。
    • @Phan destroydestroyByIdembedsMany 相同。您的嵌入式实例在 db 中有 id 吗?
    【解决方案2】:

    3 年后,我使用remove, destroyById 也遇到了同样的问题。

    然后我使用unset 方法。它有效。

    Person.findById(body.metadata.person.id, (err, person) => {
        person.creditCards.unset(
            body.creditCard.id,
            (err, res) => {
            }
        );
    }
    

    这很好用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多