Создать модель и ассоциацию в Sequelize и Epilogue

Желаемое поведение

Используя Epilogue JS и Sequelize, у меня есть два ресурса, Student а также Course, которые имеют отношения m2m. Я хотел бы создать новый Student и связать этот экземпляр студента с существующим курсом.

Эта проблема

Когда я POST новый студент и включив информацию о курсе в полезную нагрузку, Epilogue/Sequelize попытается создать нового студента и создать новые курсы на основе вложенной полезной нагрузки. Это приведет к ошибке проверки, потому что эти курсы уже существуют.

Пример кода

const Student = db.define('student', {
  id: Sequelize.UUID,
  name: Sequelize.STRING
});

const Course = db.define('course', {
  id: Sequelize.UUID,
  name: Sequelize.STRING
});

Student.belongsToMany(Course, {through: 'student_courses'});
Course.belongsToMany(Student, {through: 'student_courses'});

const StudentResource = epilogue.resource({
  model: Student,
  endpoints: ['/student', '/student/:id'],
  include: [{
    model: Course
  }];
});

Я хочу отправить нового студента и связать с существующим курсом, например:

// POST /users/
{
  name: "Sally",
  courses: [
    {id: 123, name: "math"},
    {id: 456, name: "science"}
  ]
}

Однако, Epilogue/Sequelize потерпит неудачу, потому что эти курсы уже существуют:

{
    "message": "Validation error",
    "errors": [
        {
            "field": "id",
            "message": "id must be unique"
        }
    ]
}

1 ответ

Не очень знакомый с тем, как работает эпилог, но, делая это исключительно через секвелиз, вы можете использовать set<Association> методы

Нечто подобное

student = model.student.create(/*some properties*/)
student.setCourse(course_id)

Подробнее об этом в этом выпуске

Другие вопросы по тегам