【问题标题】:How to specify foreign key in association query如何在关联查询中指定外键
【发布时间】:2019-05-18 04:43:52
【问题描述】:

当我进行包含另一个模型的查询时,如何指定一个外键,因为该模型有很多外键。

DBTweet.findAll({ where: { userID: followingUserID }, include: [
            { model: DBUser, 
        include: [
                { model: DBFollower // Here i want to specify the foreign key },
        ] },
]})

更新:

当我与 as 有两个关联时

用户多次与关注者关联。要识别正确的关联,您必须使用“as”关键字来指定要包含的关联的别名

DBFollower.findAll({ where: { followerUserID: req.params.userID }, include: [ 
    { model: DBUser, attributes: { exclude: ['email', 'password', 'loginType', 'telephoneNumber'] }}
]})

这些是我的联想:

DBUser.hasMany(DBTweet, { foreignKey: 'userID' }, { onDelete: 'cascade' })
DBTweet.belongsTo(DBUser, {foreignKey: 'userID'}, { onDelete: 'cascade' })

DBUser.hasMany(DBFollower, { as: 'followingUserIDAlias', foreignKey: 'followingUserID' }, { onDelete: 'cascade' })
DBFollower.belongsTo(DBUser, { as: 'followingUserIDAlias', foreignKey: 'followingUserID' }, { onDelete: 'cascade' })

DBUser.hasMany(DBFollower, { as: 'followerUserIDAlias', foreignKey: 'followerUserID' }, { onDelete: 'cascade' })
DBFollower.belongsTo(DBUser, { as: 'followerUserIDAlias', foreignKey: 'followerUserID' }, { onDelete: 'cascade' })

【问题讨论】:

    标签: javascript mysql node.js foreign-keys sequelize.js


    【解决方案1】:
    DBTweet.findAll({ 
      where: { userID: followingUserID }, 
      include: [{ 
        model: DBUser,
        as: 'Users', //here goes the alias as well
        include: [{ 
          model: DBFollower, 
          as: 'Followers' //here is goes the alias of the association
        }],
      }]
    });
    
    
    module.exports = (sequelize, DataTypes) => {
      const DBUser = sequelize.define('DBUser', {
        // your attributes
      });
    
      DBUser.associate = (models) => {
        DBUser.hasMany(models.DBFollower,  {  as: 'Followers',  foreignKey: 'your_key' });
        // DBUser.belongsTo(models.DBFollower,  {  as: 'Followers',  foreignKey: 'branch_id' });
      };
    
      return DBUser;
    };
    

    更新:

    现在与您的关联:

    DBUser.hasMany(DBTweet, { as: 'Users', foreignKey: 'userID', onDelete: 'cascade' })
    DBTweet.belongsTo(DBUser, { as: 'Users', foreignKey: 'userID', onDelete: 'cascade' })
    
    DBUser.hasMany(DBFollower, { as: 'followingUserIDAlias', foreignKey: 'followingUserID', onDelete: 'cascade' })
    DBFollower.belongsTo(DBUser, { as: 'followingUserIDAlias', foreignKey: 'followingUserID', onDelete: 'cascade' })
    
    DBUser.hasMany(DBFollower, { as: 'followerUserIDAlias', foreignKey: 'followerUserID', onDelete: 'cascade' })
    DBFollower.belongsTo(DBUser, { as: 'followerUserIDAlias', foreignKey: 'followerUserID', onDelete: 'cascade' })
    

    【讨论】:

    • 我有两个从 DBUser 到 DBFollower 的 hasMany 关联:我收到此错误:用户多次与关注者关联。要识别正确的关联,您必须使用“as”关键字来指定要包含的关联的别名
    • 正如错误所说,您需要在每个关联上放置一个别名。为避免这种情况,请始终使用别名。
    • 如果我这样做:在 DBFollower findAll 查询中我得到同样的错误。再次查看问题
    • 你能更新DBTweetDBUserDBFollower的关联吗
    • 再次查看问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    相关资源
    最近更新 更多