web-dev-qa-db-fra.com

Sequelize: semence avec des associations

J'ai 2 modèles, des cours et des vidéos, par exemple. Et Cours a de nombreuses vidéos.

// course.js
'use strict';

module.exports = (sequelize, DataTypes) => {
  const Course = sequelize.define('Course', {
    title: DataTypes.STRING,
    description: DataTypes.STRING
  });

  Course.associate = models => {
    Course.hasMany(models.Video);
  };

  return Course;
};


// video.js
'use strict';

module.exports = (sequelize, DataTypes) => {
  const Video = sequelize.define('Video', {
    title: DataTypes.STRING,
    description: DataTypes.STRING,
    videoId: DataTypes.STRING
  });

  Video.associate = models => {
    Video.belongsTo(models.Course, {
      onDelete: "CASCADE",
      foreignKey: {
        allowNull: false
      }
    })
  };

  return Video;
};

Je veux créer des graines avec des cours qui incluent des vidéos. Comment puis-je le faire? Je ne sais pas comment créer des graines avec des vidéos incluses.

8
zett

Vous pouvez utiliser queryInterface de Sequelize pour passer au SQL brut afin d'insérer des instances de modèle qui nécessitent des associations. Dans votre cas, la manière la plus simple consiste à créer un semoir pour les cours et les vidéos. (Une remarque: je ne sais pas comment vous définissez votre clé primaire et étrangère, donc je fais l'hypothèse que la table des vidéos a un champ course_id.)

module.exports = {
  up: async (queryInterface) => {
    await queryInterface.bulkInsert('courses', [
      {title: 'Course 1', description: 'description 1', id: 1}
      {title: 'Course 2', description: 'description 2', id: 2}
    ], {});

    const courses = await queryInterface.sequelize.query(
      `SELECT id from COURSES;`
    );

    const courseRows = courses[0];

    return await queryInterface.bulkInsert('videos', [
      {title: 'Movie 1', description: '...', id: '1', course_id: courseRows[0].id}
      {title: 'Movie 2', description: '...', id: '2', course_id: courseRows[0].id},
      {title: 'Movie 3', description: '...', id: '3', course_id: courseRows[0].id},
    ], {});
  },

  down: async (queryInterface) => {
    await queryInterface.bulkDelete('videos', null, {});
    await queryInterface.bulkDelete('courses', null, {});
  }
};
17
mcranston18