NodeJS Sequelize -当两个表具有belongsToMany关联时删除连接表中的行

lsmd5eda  于 2023-02-12  发布在  Node.js
关注(0)|答案(1)|浏览(280)

我在sequelize中有两个表,它们彼此具有belongstoMany关联。我有第三个连接表,当从两个表中删除一行时,我希望从连接表中删除级联行。
续集版本:3.23.0
我尝试了各种可能性来创建续集表
a)在关联内添加钩子b)在连接表的关联内添加外键c)从sequelize迁移脚本(https://sequelize.readthedocs.io/en/v3/docs/migrations/)(以前在项目中未使用)
以下是我的续集模型
1.产品型号

var product = sequelize.define('product', {
    name: { 
      type: DataTypes.STRING, 
      allowNull: false 
     },
    {
      timestamps: false,
      classMethods: {
        associate: function (models) {

 product.belongsToMany(models.users, {through: 'productUsers', onDelete: 'cascade'});
        }
      }
    });

2.用户模型:

var users = sequelize.define('users', {
    name: {type: DataTypes.STRING, allowNull: false, unique: true},
  },
  {
    classMethods: {
      associate: function(models) {
      users.belongsToMany(models.product, {through:'productUsers', onDelete: 'cascade'});

      }
    }
  });
  1. productUsers连接表
var productUsers = sequelize.define('productUsers', {

}, {
classMethods: {
associate: function (models) {
productUsers.belongsTo(models.product,{onDelete:'cascade'});
productUsers.belongsTo(models.model,{onDelete:'cascade'});
}
}
},
{
timestamps: true
});

现在,我想在删除产品或用户时删除productUsers表中的级联行,但不会删除连接表中的任何内容。

qhhrdooz

qhhrdooz1#

根据续集文档https://sequelize.org/docs/v6/advanced-association-concepts/advanced-many-to-many/
通过传递一个字符串到'through',我们要求Sequelize自动生成一个模型,在您的例子中是'ProductUsers'连接表。自动模型生成的优点是它带有内置函数,允许直接链接和取消链接模型示例。下面的语法对我很有效:一个月一个月一个月一个月一个月
或者,您可以使用自己的交汇点模型。这种情况下的关联调用不应使用模型名称的引号:

product.belongsToMany(models.User {through: models.ProductUsers})

然后,您可以通过调用模型来添加或删除联接:

ProductUsers.create({ user_id, product_id })

ProductUsers.destroy({ where: {user_id:something, product_id:something}})

您应该考虑正确的命名策略。请查看Sequelize文档。

相关问题