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