たとえば、コースとビデオの2つのモデルがあります。そして、コースには多くのビデオがあります。
// 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;
};
ビデオを含むコースでシードを作成します。どうすればできますか?ビデオが含まれているシードを作成する方法がわかりません。
アソシエーションを必要とするモデルインスタンスを挿入するために、SequelizeのqueryInterface
を使用して生のSQLにドロップダウンできます。あなたの場合、最も簡単な方法は、コースとビデオのシーダーを1つ作成することです。 (注:主キーと外部キーをどのように定義しているかわからないため、videosテーブルにフィールド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, {});
}
};