sequelize使用include指定查询中的连接键

时间:2015-10-12 10:40:04

标签: sequelize.js

我有两个模型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将一个新的连接短语连接到主连接。

1 个答案:

答案 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',
});