Я думаю, вам не хватает синтаксиса
students: Sequelize.ARRAY({
type: Sequelize.UUID,
references: { model: 'users', key: 'id' }, // this has no effect
})
Должно быть
students: {
type: DataTypes.ARRAY({ type: DataTypes.UUID }),
references: { model: 'users', key: 'id' }
}
Это тоже не сработает, потому что тип данных students
(ARRAY
) и id
(UUID
) из User
не соответствует.
Кроме того, с этими ассоциациями вы добавляете два столбца в User
, ссылаясь на id
из Class
, но вам нужно только one
Class.hasMany(User, { foreignKey: 'students' }); //will add students attribute to User
User.belongsTo(Class); //will add classId attribute to User
, если вы хотите назвать столбец внешнего ключа, передайте одно и то же имя в обе ассоциации, по умолчанию Sequelize
добавит classId
, однако, если вы настроили underscored: true
на моделях будет class_id
Вот рабочее решение
const User = sequelize.define('user', {
id: { type: DataTypes.UUID, primaryKey: true },
});
const Class = sequelize.define('class', {
id: { type: DataTypes.UUID, primaryKey: true },
students: DataTypes.ARRAY({ type: DataTypes.UUID }),
});
Class.hasMany(User, { foreignKey: 'class_id' });
User.belongsTo(Class, { foreignKey: 'class_id' });