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

我有一个表UserHobbie,它在ManyToMany关系中链接User和Hobbie。我正在尝试声明一个回送hasManyThrough关系,例如

User.hasMany(Hobbie, {through: UserHobbie});

但我似乎做得不好,因为不会显示在资源管理器中。我已经在引导部分之后立即在/server/server.js中声明了它,并尝试在/common/User.js/common/Hobbie.js中进行了声明(但在其中任何一个中,其他模型都不可见)。

是否有适当的语法在User.json或Hobbie.json中添加它?那将是我首选的方式,因为我在json定义中输入的所有内容都将在浏览器中显示出来。

最佳答案

为了解决Model JSON中的问题,我将在下面概述解决方案。但是,使用“hasAndBelongsToMany”关系可以更轻松地解决您的问题,我还将在下面概述。

在您的User.json中:

  "relations": {
    "Hobbies": {
      "type": "hasMany",
      "model": "Hobbie",
      "through": "UserHobbie",
      "foreignKey": "hobbieId"
    }
  }

在您的Hobbie.json中:
  "relations": {
    "Users": {
      "type": "hasMany",
      "model": "User",
      "through": "UserHobbie",
      "foreignKey": "userId"
    }
  }

您的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": []
}

此简化程序的操作如下:

不要明确创建UserHobbies模型。环回将自动为您创建一个联接模型。

在您的用户模型中:
  "relations": {
    "Hobbies": {
      "type": "hasAndBelongsToMany",
      "model": "Hobbie"
    }
  }

在您的Hobbie模型中:
  "relations": {
    "Users": {
      "type": "hasAndBelongsToMany",
      "model": "User"
    }
  }

如果要在代码中做到这一点,即表示正确,则存在引导时序问题,这些问题使这些关系无法出现在资源管理器中。我将很快添加另一个答复,以向您展示如何进行这项工作。

10-04 12:38