在续集种子中查找记录

在续集种子中查找记录

问题描述:

我一直在试图为我的项目写一些种子,但我遇到了一些障碍。在续集种子中查找记录

我有many-to-many与我的usersroles表的关系。所以,当我播种数据库时,我需要在连接表中添加一个带有正确ID的记录。为了做到这一点,我需要通过email和角色name找到用户,并得到ids,这就是问题所在。我在sequelize site上找不到任何好的文档。我正在使用sequelize-cli进行播种和迁移。我得到一个参数queryInterface,但我找不到任何示例或提到这件事实际上可以做什么。只是一些简单的例子让我通过迁移(以某种方式)以及我在google上能够找到的东西。

我用“肮脏伎俩”我想说解决了这个...

// user_seeds.js 
up: function (queryInterface, Sequelize) { 
    return queryInterface.bulkInsert(table, [{ 
    id: 1, 
    name: 'John doe', 
    email: '[email protected]', 
    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 
    }]); 
}, 

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

+0

你解决了吗? – thur

+0

以某种方式我做到了。 –

这可能不是解决此问题的最佳做法,但我无法找到更好的东西,而且足以让我满意。

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

因此,基本上,只是打

const { User } = require('./models'); 

up: function (queryInterface, Sequelize) { 
    return User.findOrCreate({ 
    where: { email: '[email protected]' }, 
    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. 
    } 
    },