2016-06-11 2 views
2

Я пытался написать некоторые семена для своего проекта, но я столкнулся с некоторой проблемой.найти записи в sequelize seed

У меня отношение many-to-many к моим users и roles таблице. Поэтому, когда я загружаю базу данных, мне нужно добавить запись с правильными идентификаторами в мою таблицу соединений. Для этого мне нужно найти пользователя по 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

Так или иначе. –

ответ

0

Возможно, это не самая лучшая практика для решения этой проблемы, но я не смог найти ничего лучшего, и это было достаточно хорошо, чтобы меня удовлетворило.

В основном, для того, чтобы найти записи, требуется фактическая модель для необходимых таблиц и использование обычного Sequelize API.

Так в основном, просто удар

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

up: function (queryInterface, Sequelize) { 
    return User.findOrCreate({ 
    where: { email: '[email protected]' }, 
    defaults: { 
     name: 'John Doe' 
    } 
    }); 

И так далее, и так далее. Надеюсь, это поможет кому-то, если у кого-то есть лучший способ сделать это, пожалуйста, поделитесь.

1

Да, вы можете использовать queryInterface для запроса базы данных.

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

    if(!user) { 
     // do bulkInsert stuff. 
    } 
    }, 
Смежные вопросы