【问题标题】:How to include related entities in REST with loopback.io如何使用 loopback.io 在 REST 中包含相关实体
【发布时间】:2014-09-18 04:02:50
【问题描述】:

我正在使用 Strongloop 的环回工具来创建 REST 服务。我想知道在请求模型时如何定义要返回的相关实体。

我在文档中看到您可以发送像 GET /api/members?filter[include]=posts 这样的请求,这将返回相关的帖子模型,我发现您可以发出像 GET /api/members?filter[include]=posts&filter[include]=comments 这样的请求来获取帖子和 cmets,但是有没有如何在代码或生成的 json 文件中定义您希望在请求模型时始终返回某种关系?

【问题讨论】:

    标签: node.js rest loopbackjs


    【解决方案1】:

    您可以使用两种不同的简单方法来建立与帐户的关系。

    1. 使用 Model.json 文件中的模型定义。

      "validations": [],
      "relations": {
        "team": {
        "type": "belongsTo",
        "model": "Team",
        "foreignKey": ""
      },
      "user": {
        "type": "belongsTo",
        "model": "User",
        "foreignKey": ""
      }
      }
      

    这将始终使用直接关系将一个模型与另一个模型绑定,您可以使用以下代码行检索它们。

    app.models.TeamRole.findOne({
          where: {
            userId: user.id
          },
          include:[ {
            relation: 'team'
          },
    {
            relation: 'user'
          } ]
        },function(err,team,user){
    //retrieve relational data here
    });
    
    1. 您可以使用operational hooks 概念轻松获得此类关系。

    干杯。

    【讨论】:

      【解决方案2】:

      预设过滤器属性称为默认范围。我们有一个待处理的拉取请求来支持它。请参阅https://github.com/strongloop/loopback-datasource-juggler/pull/296

      作为功能发布之前的一种解决方法,您可以使用 beforeRemote 挂钩将过滤器对象更新为您的默认范围。见http://docs.strongloop.com/display/LB/Defining+remote+hooks

      【讨论】:

      • 感谢您的信息。对这个项目非常兴奋。
      • 该链接不再有效,但我真的很好奇如何在 beforeRemote 中覆盖过滤器,有什么提示吗?
      • 类似 ctx.args.filter = {include: 'posts'};在 beforeRemote 中就可以了
      • 今天支持预设过滤器。将此添加到您的 model.json 文件中:"scope": { "include": { "relation": "channel", "scope": { "fields": ["code", "description"] } } }。不要忘记添加belongsTo 与其他模型的关系。并为另一个模型添加一个hasMany 关系到这个模型。雷蒙德,也许你可以更新你的答案来反映这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多