【问题标题】:Seed data in Sequelize with Many-to-Many RelationshipSequelize 中的种子数据与多对多关系
【发布时间】:2017-12-25 07:46:43
【问题描述】:

我一直在尝试使用 sequelize 为我的应用程序获取一些默认数据以播种到我的 PostgreSQL 数据库中。到目前为止,我只找到了一种方法,而且并不理想。

我的主要问题是这里是否有人知道“最佳实践”的方法。

到目前为止,我已经尝试使用 Seeds,在同步每个模型后注入默认信息,最后我回到了要求文件,这些文件定义了我想在 app.js 主文件中models.sequelize.sync() 之后如何注入默认信息.

播种:除了将数据转储到数据库之外,这种方法似乎崩溃了,关联,即类方法,(据我所知)不能在这里使用,这使得更新一个Many-多对多关系几乎是不可能的。

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

在这一点上,我对挑选代码并不感兴趣,因为我正在寻找您认为/知道的将与数据库关联的默认数据的最佳方法。看起来这将是一个更受欢迎的问题,因为几乎每个应用程序都附带至少几条默认信息。我很乐意被告知我完全忽略了一些东西,它实际上很简单:)

感谢提前讨论。

【问题讨论】:

  • 您的模型中是否已经定义了关联,或者您想创建新的关联?
  • 我已经在模型中定义了工作关联。
  • 我想我的主要问题是人们如何处理更复杂的播种场景。例如,我正在开发将安装在树莓派上的应用程序的用户/用户角色系统,因此我需要能够快速播种一些需要与用户权限关联的用户角色。我无法通过板载种子流程实现这一点。

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


【解决方案1】:

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

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中有更多例子

【讨论】:

  • 对,但是通过连接表的多对多关联呢?通常我会使用 SetSpecialities() 函数,但它在种子中不可用。
  • @joshrathke 你找到解决方法了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
相关资源
最近更新 更多