Sam*_*hes 3 model loopback node.js
我有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中的模型之间的关系时,RESTful请求如"获取帐户id的小部件= 1",例如,工作得很好.
GET /accounts/1/widgets 产生帐户1具有的小部件,产生一个小部件数组:
[
{
"id": 1,
"name": "wg_user_mgr"
},
{
"id": 2,
"name": "wg_desc"
}
]
Run Code Online (Sandbox Code Playgroud)
这一切都很好.
但是,我想将此小部件数组结果与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"
}
]
}
Run Code Online (Sandbox Code Playgroud)
但是,具有该请求的回送实际返回的是:
{
"id": 1,
"name": "Account1Name",
"widgets": []
}
Run Code Online (Sandbox Code Playgroud)
空小部件数组!当我查看环回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"
}
}
Run Code Online (Sandbox Code Playgroud)
但是这个:
"relations": {
"widgets": {
"type": "hasMany",
"model": "widget",
"foreignKey": "account_id",
"through": "widget_to_account",
"keyThrough": "account_id"
}
}
Run Code Online (Sandbox Code Playgroud)
这不是非常清楚,甚至在loopback api docs中错误地说明了 - .-
更新:
再做一些挖掘,我在https://groups.google.com/forum/#!topic/loopbackjs/sH7bKoqzU5c找到答案.
在2资源模型中定义关系的位置,您必须专门定义"keyThrough"值.
不是这个:
"relations": {
"widgets": {
"type": "hasMany",
"model": "widget",
"foreignKey": "account_id",
"through": "widget_to_account"
}
}
Run Code Online (Sandbox Code Playgroud)
但是这个:
"relations": {
"widgets": {
"type": "hasMany",
"model": "widget",
"foreignKey": "account_id",
"through": "widget_to_account",
"keyThrough": "widget_id"
}
}
Run Code Online (Sandbox Code Playgroud)
这不是由超清晰,并且甚至表示不正确的环回API文档.我希望他们能够停止这种他们一直在推动的"自动命名"范式.看看环回SO和更广泛的社区,它通常会导致模型被错误地命名,这样的键被设置为完全任意的名称 -
| 归档时间: |
|
| 查看次数: |
749 次 |
| 最近记录: |