node.js - Loopback "Include"过滤器因 hasManyThrough 关系而失败

标签 node.js model loopback

我有 3 个模型。 2 个资源模型,account(id, name)widget(id, name),以及 1 个映射模型来映射这两个 widget_to_account(id, account_id, widget_id),告诉一个帐户可以访问哪些小部件,可以这么说。

在 JSON 中说明模型之间的关系时,使用 http://loopback.io/doc/en/lb3/HasManyThrough-relations.html 中的指南,例如“获取帐户 id=1 的小部件”之类的 RESTful 请求可以完美运行。

GET/accounts/1/widgets 生成帐户 1 拥有的小部件,生成一个小部件数组:

[
    {
        "id": 1,
        "name": "wg_user_mgr"
    },
    {
        "id": 2,
        "name": "wg_desc"
    }
]

这一切都很好。

但是,假设我想将此小部件数组结果与 GET 返回的帐户对象一起附加到 account 模型? Loopback 文档建议这是通过在请求中使用 include 关键字来完成的,如下所示: GET/accounts/1?filter[include]=widgets,希望返回一个 account 模型及其允许的小部件:

{
    "id": 1,
    "name": "Account1Name",
    "widgets": [
        {
            "id": 1,
            "name": "wg_user_mgr",
            "display_name": "User Manager"
        },
        {
            "id": 2,
            "name": "wg_desc",
            "display_name": "Description"
        }
    ]
}

但是,通过该请求回环实际返回的是:

{
    "id": 1,
    "name": "Account1Name",
    "widgets": []
}

清空小部件数组!当我查看环回 SQL 调试时,我看到它确实转到了 widget_to_account 表并选择了 account_id=1 的条目,但是有趣的是,它停在那里,只返回一个空的小部件数组。

有什么线索吗? hasManyThrough 环回文档实际上没有显示任何使用 include 来桥接通过映射模型连接的两个模型的示例。

我猜他们只是忘了在 ¯\_(ツ)_/¯ 中编码

更新:

进一步挖掘后,我在 https://groups.google.com/forum/#!topic/loopbackjs/sH7bKoqzU5c 找到了答案.

在 2 个资源模型中定义关系的地方,您必须专门定义“keyThrough”值。

不是这个:

"relations": {
    "widgets": {
        "type": "hasMany",
        "model": "widget",
        "foreignKey": "account_id",
        "through": "widget_to_account"
    }
}

但是这个:

"relations": {
    "widgets": {
        "type": "hasMany",
        "model": "widget",
        "foreignKey": "account_id",
        "through": "widget_to_account",
        "keyThrough": "account_id"
    }
}

这不是很清楚,甚至在 loopback api 文档中不正确陈述 -.-

最佳答案

更新:

进一步挖掘后,我在 https://groups.google.com/forum/#!topic/loopbackjs/sH7bKoqzU5c 找到了答案.

在 2 个资源模型中定义关系的地方,您必须专门定义“keyThrough”值。

不是这个:

"relations": {
    "widgets": {
        "type": "hasMany",
        "model": "widget",
        "foreignKey": "account_id",
        "through": "widget_to_account"
    }
}

但是这个:

"relations": {
    "widgets": {
        "type": "hasMany",
        "model": "widget",
        "foreignKey": "account_id",
        "through": "widget_to_account",
        "keyThrough": "widget_id"
    }
}

这不是很清楚,甚至在 loopback api 文档中错误地陈述。我希望他们能停止这种他们一直在插入的“自动命名”模式。看看 loopback SO 和更广泛的社区,模型命名不正确通常会造成很多痛苦,像这样的键被设置为完全任意的名称 -.-

关于node.js - Loopback "Include"过滤器因 hasManyThrough 关系而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43120270/

相关文章:

angularjs - nginx环回反向代理无法访问自定义路径

javascript - 观看 './**/*.js' 会导致 CPU 使用率过高

javascript - 在 GCP App Engine 上部署 NodeJS Express 应用程序时出现服务器错误 500

node.js - 如何在 esp8266(Nodemcu 开发板)上运行 Node.js?

c - 如何在c/c++程序中使用Winpcap库跟踪LoopBack接口(interface)?

c# - 发送数据到 127.* : Unreachable Host

node.js - 在 Express 3.x 中加载样式表时出错

model-view-controller - 区分 MVC 领域、模型和实体

java - 模型应该包含 id 吗?

python - Odoo:检查是否安装了模块