2016-03-06 83 views
1

如何在表usersuser_friend之间创建正确的关系?我想要加入请求到user_friends表。如何在Sequelize中创建关系

var User = db.define('users', { 
    userId: { 
     primaryKey: true, 
     autoIncrement: true, 
     type: Sequelize.INTEGER, 
     allowNull: false, 
     field: 'user_id' 
    }, 
    login: { 
     type: Sequelize.STRING, 
     isUnique: true 
    } 
}, { 
    freezeTableName: true, 
    classMethods: { 
     associate: function (models) { 
      User.hasMany(models.UserFriend, { as: 'Friends', foreignKey: 'user' }); 
     } 
    } 
}); 

var UserFriend = db.define('user_friend', { 
    user: { 
     type: Sequelize.INTEGER, 
     allowNull: false, 
     references: { 
      model: 'users', 
      key: 'user_id' 
     } 
    }, 
    friend: { 
     type: Sequelize.INTEGER, 
     allowNull: false, 
     references: { 
      model: 'users', 
      key: 'user_id' 
     } 
    } 
}, { 
    freezeTableName: true, 
    classMethods: { 
     associate: function (models) { 
      UserFriend.belongsTo(models.User, { foreignKey: 'user_id', targetKey: 'user' }); 
      UserFriend.belongsTo(models.User, { foreignKey: 'user_id', targetKey: 'friend' }); 
     } 
    } 
}); 

User.friends = function (id) { 
    return UserFriend.findAll({ 
     where: { user: id }, 
     include: [ 
      { model: User } 
     ] 
    }); 
}; 

当我打电话User.friends(1)它抛出一个错误

Unhandled rejection Error: users is not associated to user_friend! 

回答

0

我的解决方案

var User = db.define('users', { 
    userId: { 
     primaryKey: true, 
     autoIncrement: true, 
     type: Sequelize.INTEGER, 
     allowNull: false, 
     field: 'user_id' 
    }, 
    login: { 
     type: Sequelize.STRING, 
     isUnique: true 
    } 
}); 

var Friendship = db.define('friendship', { 
    user: { 
     type: Sequelize.INTEGER, 
     allowNull: false, 
     references: { 
      model: 'users', 
      key: 'user_id' 
     } 
    }, 
    friend: { 
     type: Sequelize.INTEGER, 
     allowNull: false, 
     references: { 
      model: 'users', 
      key: 'user_id' 
     } 
    } 
}); 

Friendship.belongsTo(User, { as: 'info', foreignKey: 'friend' }); 
User.belongsToMany(User, { as: 'friendship', through: Friendship, foreignKey: 'user', otherKey: 'friend' }); 
User.hasMany(Friendship, { as: 'friends', foreignKey: 'user' }); 

然后你就可以得到这样的朋友

Friendship.findAll({ 
     where: { user: id }, 
     include: [{ 
      model: User, 
      as: 'info' 
     }] 
    });