在环回中创建现有项目之间的自我关系

时间:2015-05-09 09:31:55

标签: loopbackjs self-reference

我正在尝试为彼此相关的项目创建模型。人们可以想到一个类似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

我是否需要创建自己创建两个现有项目之间关系的函数,或者我的模型定义是否存在问题?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

自我通过:

在某些情况下,您可能希望定义从模型到自身的关系。例如,考虑用户可以关注其他用户的社交媒体应用程序。在这种情况下,用户可以跟随许多其他用户,并且可以跟随许多其他用户。下面的代码显示了如何定义它以及相应的keyThrough属性:

公共/模型/ user.js的

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'可能会解决您的问题。