在续集种子中findlogging

我一直在试图为我的项目写一些种子,但是我遇到了一些麻烦。

我与我的usersroles表有着many-to-many关系。 所以,当我播种数据库时,我需要添加一个正确的ID到我的连接表的logging。 为了做到这一点,我需要find用户通过email和angular色的name并得到ids ,这就是问题所在。 我无法在续集网站上find任何好的文档。 我正在使用sequelize-cli来播种和迁移东西。 我作为一个参数queryInterface ,但我找不到任何示例或提到什么事情可以实际上做。 只是一些简单的例子,让我通过迁移(以某种方式),我能在谷歌find。

我已经通过使用“脏伎俩”来解决这个问题了。

 // user_seeds.js up: function (queryInterface, Sequelize) { return queryInterface.bulkInsert(table, [{ id: 1, name: 'John doe', email: 'john@doe.com', created_at, updated_at }], {}); // roles_seeds.js up: function (queryInterface, Sequelize) { return queryInterface.bulkInsert(table, [{ id: 1, name: 'admin', created_at, updated_at }, { id: 2, name: 'user', created_at, updated_at }]); //user_roles_seeds.js up: function (queryInterface, Sequelize) { return queryInterface.bulkInsert(table, [{ employee_id: 1, role_id: 1 }]); }, 

不要喜欢这个解决scheme,因为将来可能会很麻烦,如果我想再次运行种子,忘记它是如何工作的。 应该有一种方法可以让我使用queryInterface来查询数据库。 我想知道你们中的一个是否遇到了这个问题,并解决了它,如果是的话,请分享。

这可能不是解决这个问题的最佳实践,但我无法find更好的东西,而且足以让我满意。

基本上我所做的是需要所需表格的实际模型,并使用正常的Sequelize API来查找logging。

所以基本上,只是一拳

 const { User } = require('./models'); up: function (queryInterface, Sequelize) { return User.findOrCreate({ where: { email: 'john@doe.com' }, defaults: { name: 'John Doe' } }); 

等等等等。 希望这有助于某人,如果有人有这样做的更好的方式,请分享。

是的,你可以使用queryInterface来查询数据库。

  async up(queryInterface, Sequelize) { const user = await queryInterface.rawSelect('User', { where: { name: 'John doe', }, }, ['id']); if(!user) { // do bulkInsert stuff. } },