Sequelize中的种子数据与多对多关系

时间:2017-07-19 20:46:32

标签: node.js sequelize.js sequelize-cli

我已经搞砸了尝试使用sequelize为我的应用程序获取一些默认数据以种子进入我的PostgreSQL数据库。到目前为止,我只找到了一种方法,但这并不理想。

我的主要问题是,如果有人知道这种“最佳实践”的方式。

到目前为止,我尝试使用Seeds,在同步每个模型后注入默认信息,最后我又回到了需要定义我想如何在主应用程序中models.sequelize.sync()之后注入默认信息的文件。 js文件。

播种:这种方法在做的不仅仅是将数据转储到数据库中时,似乎分崩离析,这种关联,即类方法,(据我所知)不能在这里使用,这使得更新许多 - To-Many关系几乎不可能。

模型定义:将关联的默认信息注入模型的问题是,您必须以某种方式将其他模型定义导入到模型中,这似乎无法正常工作。

在这一点上,我并没有那么有趣地挑选代码,因为我正在寻找你认为/知道的最佳方法来获得与数据库有关联的默认数据。这似乎是一个更受欢迎的问题,因为几乎每个应用程序都附带至少一些默认信息。我很想被告知,我完全忽视了一些东西,而且实际上非常简单:)

感谢您提前讨论。

1 个答案:

答案 0 :(得分:0)

如果我们已经定义了模型关联,我们就不需要做任何额外的事情。让我们举一个例子,医生可以有一个以上的专业。在模型定义中,我们可以定义我们的关联。

classMethods: {
      associate: function (models) {
        models.doctor.hasMany(models.specialty, {foreignKey: 'doctor_npi'});
      }

现在我们可以创建一个插入函数并从种子

调用它
insertDoctor: function (models, firstname, lastname, specialties) {
        return this.create({
          firstname: firstname,
          lastname: lastname,
          specialties: specialties,
        }, {
          include: [models.specialty],
        });
      }

使用正确的参数调用此函数应该有效。

official documentation

中有更多示例