Sequelize.js 当关系不存在时,续写归属关系';不要使用主键

Sequelize.js 当关系不存在时,续写归属关系';不要使用主键,sequelize.js,Sequelize.js,我正在建立一个社交网络,所以我的模型是帖子、用户和用户跟踪用户关系 var User = sequelize.define('user', { username: Sequelize.DataTypes.STRING }) var Post = sequelize.define('post', { text: Sequelize.DataTypes.STRING, userId: Sequelize.DataTypes.INTEGER }) var Follow = seque

我正在建立一个社交网络,所以我的模型是帖子、用户和用户跟踪用户关系

var User = sequelize.define('user', {
  username: Sequelize.DataTypes.STRING
})

var Post = sequelize.define('post', {
  text: Sequelize.DataTypes.STRING,
  userId: Sequelize.DataTypes.INTEGER 
})

var Follow = sequelize.define('follow', {
    followerUserId: Sequelize.DataTypes.INTEGER,
    followingUserId: Sequelize.DataTypes.INTEGER,
  })
为了获得某个用户的提要(他们跟踪的用户的所有帖子),我需要能够执行如下查询:

User.findById(13).then(user => user.getFollowingPosts())
但我被这个协会迷住了:

User.belongsToMany(Post, {
      as: 'followingPosts',
      through: { model: Follow, },
      foreignKey: 'followerUserId',
      otherKey: 'userId',
    });
生成错误的SQL连接条件,我无法修复:

SELECT ...
FROM `posts` AS `post` INNER JOIN `follows` AS `follow`
  ON `post`.`id` = `follow`.`userId` AND `follow`.`followerUserId` = 13

我无法将Sequelize改为userpost.userId而不是post.id

找到了一个足够好的解决方法:

Post.belongsTo(Follow, {
  as: 'following',
  foreignKey: 'userId',
  targetKey: 'followingUserId',
  allowNull: false
})
这样,我就完全跳过User.blonggasmy并查询以下信息:

Post.findAll({
  include: [{
    association: Post.associations.following,
    where: { followerUserId: 13}
  }]
})
由此产生:

SELECT ...
FROM `posts` AS `post` INNER JOIN `follows` AS `following`
  ON `post`.`userId` = `following`.`followingUserId` AND
     `following`.`followerUserId` = 13