我正在尝试为彼此相关的项目创建模型。人们可以想到一个类似Twitter的案例,用户互相追随。我试着写这样的模型(common / models / user.json):
{
"name": "user",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"name": {
"type": "string"
}
},
"validations": [],
"relations": {
"following": {
"type": "hasAndBelongsToMany",
"model": "user",
"foreignKey": "userId"
}
"followers": {
"type": "hasAndBelongsToMany",
"model": "user",
"foreignKey": "userId"
}
},
"methods": []
}
我可以使用curl创建用户,但该模型不允许我发布关注者或将用户关注给给定用户:
curl -X POST -d '{"name": "Bob"}' http://localhost:3000/api/users
curl -X POST -d '{"name": "Mary"}' http://localhost:3000/api/users
curl -X POST -d '{"userId": 1}' http://localhost:3000/api/users/2/following
我是否需要创建自己创建两个现有项目之间关系的函数,或者我的模型定义是否存在问题?任何帮助将不胜感激。
答案 0 :(得分:1)
自我通过:
在某些情况下,您可能希望定义从模型到自身的关系。例如,考虑用户可以关注其他用户的社交媒体应用程序。在这种情况下,用户可以跟随许多其他用户,并且可以跟随许多其他用户。下面的代码显示了如何定义它以及相应的keyThrough属性:
User.hasMany(User, {as: 'followers', foreignKey: 'followeeId', keyThrough: 'followerId', through: Follow});
User.hasMany(User, {as: 'following', foreignKey: 'followerId', keyThrough: 'followeeId', through: Follow});
Follow.belongsTo(User, {as: 'follower'});
Follow.belongsTo(User, {as: 'followee'});
请求注意创建haseMany关系中的'through'
属性,然后'belongsTo'
可能会解决您的问题。