循环“包含”过滤器失败,具有hasManyThrough关系

问题描述 投票:3回答:1

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

在使用http://loopback.io/doc/en/lb3/HasManyThrough-relations.html中的指南陈述其JSON中的模型之间的关系时,例如“获取帐户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 docs中错误地说明了 - .-

node.js model loopback
1个回答
9
投票

更新:

再做一些挖掘,我在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文档中也说错了。我希望他们能够停止这种他们一直在推动的“自动命名”范式。看看环回SO和更广泛的社区,它通常会导致模型被错误地命名,这样的键被设置为完全任意的名称 -

© www.soinside.com 2019 - 2024. All rights reserved.