Sequelize: seed with associations

后端 未结 3 637
南旧
南旧 2021-02-03 10:37

I have 2 models, Courses and Videos, for example. And Courses has many Videos.

// course.js
\'use strict\';

module.exports = (sequelize, DataTypes) => {
  co         


        
3条回答
  •  南旧
    南旧 (楼主)
    2021-02-03 11:15

    The bulkInsert method returns a promise that is resolved with an ID of the first inserted item. We can use this information to insert videos. It can look like this:

    function getId( firstId, items, needly ) {
        for ( let i = 0; i < items.length; i++ ) {
            if ( items[i].title === needly ) {
                return firstId + i;
            }
        }
    
        return null;
    }
    
    exports.up = async ( queryInterface, Sequelize ) => {
        const courses = [
            {
                title: 'Course 1',
                description: '...',
            },
            {
                title: 'Course 2',
                description: '...',
            },
            {
                title: 'Course 3',
                description: '...',
            },
            {
                title: 'Course 4',
                description: '...',
            },
            {
                title: 'Course 5',
                description: '...',
            },
        ];
    
        const firstId = await queryInterface.bulkInsert( 'courses', courses, {} );
        const course2Id = getId( firstId, courses, 'Course 2' );
        const course5Id = getId( firstId, courses, 'Course 5' );
    
        return queryInterface.bulkInsert( 'categories', [
            { title: 'Video 1', description: '...', courseId: course2Id },
            { title: 'Video 2', description: '...', courseId: course2Id },
            { title: 'Video 3', description: '...', courseId: course5Id },
            { title: 'Video 4', description: '...', courseId: course5Id },
            { title: 'Video 5', description: '...', courseId: course5Id },
        ], {} );
    };
    
    exports.down = async ( queryInterface ) => {
        await queryInterface.bulkDelete( 'videos', null, {} );
        await queryInterface.bulkDelete( 'courses', null, {} );
    }
    

提交回复
热议问题