【问题标题】:Sequelize saving many to manySequelize 保存多对多
【发布时间】:2015-03-15 23:48:56
【问题描述】:

如果有任何关于如何保存多对多关系的扩展教程,我正在徘徊?我发现文档不仅仅是基本的。它缺少许多用例示例。

我有两个模型:客户端和规则。它们具有 n:n 关系。

客户:

var Client = sequelize.define('client', {
    title: {
      type: DataTypes.STRING(200),
      allowNull: false
    },
    company: {
        type: DataTypes.STRING(200),
        allowNull: false
    },
    vendor: {
      type: DataTypes.BOOLEAN,
      allowNull: false,
      defaultValue: false
    },
    consumer: {
      type: DataTypes.BOOLEAN,
      allowNull: false,
      defaultValue: true
    },
    address_id: {
      type: DataTypes.INTEGER,
      allowNull: true
    }
  },{
    paranoid: true,
    underscored: true,
    classMethods: {
      associate:function(models){
          Client.hasMany(models.rule, { through: 'client_rules', onDelete: 'cascade'});
      }
    }
  });

规则:

var Rule = sequelize.define('rule', {

    service_id: {
      type: DataTypes.INTEGER,
      allowNull: false
    },
    is_allowed: {
      type: DataTypes.BOOLEAN,
      defaultValue: false
    },
    valid_until: {
      type: DataTypes.DATE,
      allowNull: true,
    },
    rule: {
      type: DataTypes.TEXT,
      allowNull: true
    },
    type: {
      type: DataTypes.INTEGER, // 1 for company rule, 2 for individual rule
      allowNull: false, 
    },
    active: {
      type: DataTypes.BOOLEAN,
      defaultValue: true
    }

  },{
    underscored: true,
    paranoid: true,
    classMethods: {
      associate:function(models){
          Rule.belongsToMany(models.client, { through: 'client_rules', onDelete: 'cascade'});
          Rule.belongsTo(models.service, { foreignKey: 'service_id' } );

      }
    }
  });

现在我想为客户创建一个新规则。所以我必须先创建规则,然后通过“client_rules”将其关联到客户端。

我如何使用 sequelize 做到这一点?这不起作用:

var clientID = req.user.client_id;
Client.find({ id: clientID })
.then(function(client){
  return client.addRule(req.body)
})
.catch(function(err){
  console.log(err)
})

[TypeError: Cannot read property 'replace' of undefined]

【问题讨论】:

    标签: node.js postgresql sequelize.js


    【解决方案1】:

    好的,我知道该怎么做。文档非常混乱。

        var clientID = req.user.client_id;
        return Rule.create(req.body)
        .then(function(newRule){
              var ruleToAdd = newRule;
              return Client.findOne({ where: { id: clientID } })
        .then(function(client){
                return client.addRule(ruleToAdd)
                .then(function(ans){
                  return ruleToAdd;
                })
        })
    

    【讨论】:

    • 你能在一份声明中做到吗?
    • 我尝试使用您的示例,但是您在哪里定义了 addRule?你能给出这个方法的代码示例吗?
    • 由于模型叫做“Rule”,而且关系是多对多的,所以调用add{yourModel}就可以了
    猜你喜欢
    • 1970-01-01
    • 2017-07-26
    • 2020-10-31
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2015-04-06
    • 2018-06-14
    • 2012-10-24
    相关资源
    最近更新 更多