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