javascript - 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(); 哪个续集应该处理每个用户不超过一个购物车,这不能正常工作并且每次服务器重新加载它都会为用户制作另一个购物车
解决方案
用户的 id 是购物车表中的唯一键还是主键?我认为应该是,并且您的密钥应该在我认为的那些关系中定义......就像这样......
User.hasOne(Cart, { as: 'Cart', sourceKey: 'id', foreignKey: 'user_id' }); Cart.belongsTo(User, { as: 'CartOwner', sourceKey: 'user_id', foreignKey: 'id' });
推荐阅读
- android - 我无法使用 android 上传带有 expo-file-picker 和 express-fileupload 的图像
- reactjs - 使用 useQuery 过滤数据 onChange 无法正常工作
- mysql - SQL 获取最近加入的记录
- javascript - 为什么 Mongoose 插入 null 作为子文档数组的最后一个元素?
- javascript - 使用键盘箭头键更改图像的功能
- vuejs3 - Vue 3:如何在没有路由器的情况下在当前页面链接上设置活动类?
- julia - 在 Flux 中获取神经网络边缘的权重?
- python - 如果每行在一列中有 0,则 Python PandasD 合并具有相等索引的行等于 0,如果任何(或多个)行在一列中有 1,则合并为 1
- kendo-ui - Kendo UI Grid,从 DataItem 获取列索引或名称
- fabricjs - 在fabricjs的文本区域放置标签