【问题标题】:How insert "many to many" data to sqlite on node.js with Sequelize ORM如何使用 Sequelize ORM 在 node.js 上将“多对多”数据插入到 sqlite
【发布时间】:2017-02-17 12:22:32
【问题描述】:

所以,我有这个模型:

news

module.exports = function(sequelize, DataTypes) {
  var news = sequelize.define('news', {
    title: DataTypes.STRING,
    content: DataTypes.TEXT
  }, {
    classMethods: {
      associate: function(models) {
        news.belongsToMany(models.tags, {
          through: models.tags_in_news,
          foreignKey: 'tags_id'
        })
      }
    }
  });
  return news;
};

tags

'use strict';
module.exports = function(sequelize, DataTypes) {
  var tags = sequelize.define('tags', {
    tag: DataTypes.STRING
  }, {
    classMethods: {
      associate: function(models) {
        tags.belongsToMany(models.news, {
          through: models.tags_in_news,
          foreignKey: 'news_id'
        })
      }
    }
  });
  return tags;
};

tags_in_news

'use strict';
module.exports = function(sequelize, DataTypes) {
  var tags_in_news = sequelize.define('tags_in_news', {
    news_id: {
      type: DataTypes.INTEGER,
    },
    tags_id: {
      type: DataTypes.INTEGER
    }
  }, {
    classMethods: {
      associate: function(models) {
        // associations can be defined here
      }
    }
  });
  return tags_in_news;
};

而且我还没有标准化新闻数组

var insertNews = [
  {
    title: "My new 1",
    content: "Content 1 ...",
    tags: [{tag: "tag1"}, {tag: "tag3"}, {tag: "tag5"}]
  },
  {
    title: "My new 2",
    content: "Content 2 ...",
    tags: [{tag: "tag1"}, {tag: "tag2"}, {tag: "tag3"}]
  },
  {
    title: "My new 3",
    content: "Content 3 ...",
    tags: [{tag: "tag3"}, {tag: "tag4"}, {tag: "tag5"}]
  }
]

如何以最佳方式将数据添加到数据库?

【问题讨论】:

    标签: node.js sqlite sequelize.js


    【解决方案1】:

    通过定义关系,你可以一次性创建带有标签的新闻,所以你可以这样做

    news.create({
        title: 'A news item',
        content: 'Some content',
        tags: [{ tag: 'tag1' }, { tag: 'tag2' }]
    }, {
        include: tags
    })
    

    【讨论】:

    • 好的。但重新创建了标签。如果它们不存在,我需要从表标签中获取,然后创建
    • 哦,好的。不确定,但尝试 findOrCreate(我之前没有尝试过嵌入记录)
    猜你喜欢
    • 2021-11-13
    • 2020-03-24
    • 1970-01-01
    • 2020-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多