Loopback"hasManyThrough"关系.在哪里添加?

ame*_*iel 3 node.js loopbackjs

我有一个User实体和一个Hobbie实体,都在Loopback中定义了它们的模型,我在API资源管理器中看到它们.

我有一个表UserHobbie链接User和Hobbie在ManyToMany关系.我正在尝试声明一个loopback hasManyThrough关系,例如

User.hasMany(Hobbie, {through: UserHobbie});
Run Code Online (Sandbox Code Playgroud)

但我似乎无法做得好,因为它没有出现在资源管理器中.我已经/server/server.js在bootstrapping部分之后立即声明了它,并且我已经尝试过/common/User.js并且/common/Hobbie.js(但是在其中任何一个中,其他模型都不可见).

是否有正确的语法在User.json或Hobbie.json中添加它?这将是我的首选方式,因为我在json定义中的任何内容都显示在资源管理器中.

小智 9

要解决Model JSON中的问题,我将在下面概述解决方案.但是,使用"hasAndBelongsToMany"关系可以更简单地解决您的问题,我也将在下面概述.

在你的User.json中:

  "relations": {
    "Hobbies": {
      "type": "hasMany",
      "model": "Hobbie",
      "through": "UserHobbie",
      "foreignKey": "hobbieId"
    }
  }
Run Code Online (Sandbox Code Playgroud)

在你的Hobbie.json中:

  "relations": {
    "Users": {
      "type": "hasMany",
      "model": "User",
      "through": "UserHobbie",
      "foreignKey": "userId"
    }
  }
Run Code Online (Sandbox Code Playgroud)

您的UserHobbie.json看起来像这样(请注意,您不要在"属性"中定义userId或hobbieId:

{
  "name": "UserHobbie",
  "plural": "UserHobbies",
  "base": "PersistedModel",
  "properties": {
    "id": {
      "type": "String",
      "id": true
    }
  },
  "validations": [],
  "relations": {
    "Users": {
        "type": "belongsTo",
        "model": "User",
        "foreignKey": "userId"
    },
    "Hobbies": {
        "type": "belongsTo",
        "model": "Hobbie",
        "foreignKey": "hobbieId"
    }
  },
  "acls": [],
  "methods": []
}
Run Code Online (Sandbox Code Playgroud)

这个简单的方法如下:

不要明确创建UserHobbies模型.Loopback将自动为您创建一个Join Model.

在您的用户模型中:

  "relations": {
    "Hobbies": {
      "type": "hasAndBelongsToMany",
      "model": "Hobbie"
    }
  }
Run Code Online (Sandbox Code Playgroud)

在你内部Hobbie模型:

  "relations": {
    "Users": {
      "type": "hasAndBelongsToMany",
      "model": "User"
    }
  }
Run Code Online (Sandbox Code Playgroud)

如果你想在代码中执行此操作,那么你是正确的,有一些Bootstrap时序问题可以防止这些关系出现在资源管理器中.我将很快添加另一个回复,向您展示如何使这项工作.

  • 谢谢!你在某种程度上与StrongLoop有关吗?因为,在这种情况下,我要求你在[hasManyThrough](http://docs.strongloop.com/display/LB/HasManyThrough+relations)和[hasAndBelongToMany](http:/ /docs.strongloop.com/display/LB/HasAndBelongsToMany+relations)部分,没有json类似于这些关系的代码定义. (2认同)