【问题标题】:How create relations in Sequelize如何在 Sequelize 中创建关系
【发布时间】:2016-03-06 17:18:19
【问题描述】:

如何在表usersuser_friend 之间建立正确的关系?我想向user_friends 表提出加入请求。

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!

【问题讨论】:

    标签: javascript node.js database sequelize.js


    【解决方案1】:

    我的解决方案

    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'
            }]
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 2019-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多