我有两个模型user_auth和user_follow。这样2个user_follow字段(follower_id和followee_id)引用user_auth的相同字段(id)。
我想知道如何指定当我选择具有关联user_follow的用户时将使用的连接条件。我有这段代码:
userAuth.findOne({
where:{
id: data.viewee_id
},
include: [{
model: userFollow,
required: false,
attributes: ["id"]
}]
})
使用join子句进行查询的结果如下:
FROM
`user_auth` AS `user_auth`
LEFT OUTER JOIN
`user_follow` AS `user_follow`
ON
`user_auth`.`id` = `user_follow`.`followee_id`
我不知道在哪里指定连接键。我怀疑是因为我的user_follow定义为:
classMethods: {
associate: function(models) {
userAuth.hasOne(models.user_follow, {
onDelete: "CASCADE",
onUpdate: "CASCADE",
foreignKey: 'follower_id',
targetKey: 'id',
});
userAuth.hasOne(models.user_follow, {
onDelete: "CASCADE",
onUpdate: "CASCADE",
foreignKey: 'followee_id',
targetKey: 'id',
});
}
},
根据实际测试,它是由后者引起的。如果我删除它,查找查询使用follower_id作为连接键。
是否可以在查询中指定连接键?因为否则我的未来查询将受到模型定义的限制。
PS:我知道我可以为我的include添加一个where键,但它只是通过AND
将一个新的连接短语连接到主连接。
答案 0 :(得分:2)
您需要在关联定义中使用as
选项指定别名。请参阅docs。
userAuth.hasOne(models.user_follow, {
as: 'Follower',
onDelete: "CASCADE",
onUpdate: "CASCADE",
foreignKey: 'follower_id',
targetKey: 'id',
});
userAuth.hasOne(models.user_follow, {
as: "Followee",
onDelete: "CASCADE",
onUpdate: "CASCADE",
foreignKey: 'followee_id',
targetKey: 'id',
});