首页 > 解决方案 > nodejs sequelize hasOne 关联不起作用

问题描述

在我使用 sequelize 访问数据库的 nodejs 应用程序中,我有一些名为(产品、用户、购物车、购物车项目)的表

他们之间有这种关系

Product.belongsTo(User, { constraints: true, onDelete: 'CASCADE' });
User.hasMany(Product);
User.hasOne(Cart);
Cart.belongsTo(User);
Cart.belongsToMany(Product, { through: CartItem });
Product.belongsToMany(Cart, { through: CartItem });

如您所见,用户只能拥有一个购物车,但我使用 createCart(); 功能它可以制作多个推车

sequelize
// .sync({ force: true })
    .sync()
    .then(result => {
        return User.findByPk(1);
        // console.log(result);
    })
    .then(user => {
        if (!user) {
            return User.create({ name: 'Max', email: 'test@test.com' });
        }
        return user;
    })
    .then(user => {
        // console.log(user);
        return user.createCart();
    })
    .then(cart => {
        app.listen(4000);
    })
    .catch(err => {
        console.log(err);
    });

此代码在我的 app.js 文件中,每次服务器重新加载时,它都会检查是否没有用户创建它,而是 createCart(); 哪个续集应该处理每个用户不超过一个购物车,这不能正常工作并且每次服务器重新加载它都会为用户制作另一个购物车

标签: javascriptnode.jssequelize.js

解决方案


用户的 id 是购物车表中的唯一键还是主键?我认为应该是,并且您的密钥应该在我认为的那些关系中定义......就像这样......

User.hasOne(Cart, { as: 'Cart', sourceKey: 'id', foreignKey: 'user_id' }); Cart.belongsTo(User, { as: 'CartOwner', sourceKey: 'user_id', foreignKey: 'id' });


推荐阅读