簡體   English   中英

如何在Sequelize中建立關系

[英]How create relations in Sequelize

如何在表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!

我的解決方案

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM