У меня есть три модели Channel
, ChannelUser
& Conversation
. Я пытаюсь получить все разговоры из модели Channel
, но столкнулся с неизвестной проблемой столбца (SequelizeDatabaseError: Неизвестный столбец 'Conversations-> ChannelUser.ConversationId' в 'списке полей') .
Это ассоциация, которую я использую в моделях,
Модель канала
static init(sequelize, DataTypes) {
return super.init(
{
name: DataTypes.STRING(),
},
{
sequelize,
freezeTableName: true
}
);
}
static associate(models) {
this.channelUser = this.hasMany(models.channelUser, { foreignKey: 'channelId' });
this.conversation = this.belongsToMany(models.conversation, {
through: {
model: models.channelUser
},
foreignKey: 'channelId',
otherKey: 'id'
});
}
Модель ChannelUser
static init(sequelize, DataTypes) {
return super.init(
{
},
{
sequelize,
freezeTableName: true
}
);
}
static associate(models) {
this.channel = this.belongsTo(models.channel, { foreignKey: 'channelId' });
this.user = this.belongsTo(models.user, { foreignKey: 'userId' });
this.conversation = this.hasMany(models.conversation, {
foreignKey: 'channelUserId',
});
}
Модель разговора
static init(sequelize, DataTypes) {
return super.init(
{
message: DataTypes.TEXT()
},
{
sequelize,
freezeTableName: true
}
);
}
static associate(models) {
this.channelUser = this.belongsTo(models.channelUser, { foreignKey: 'channelUserId' });
}
Я также делюсь диаграммой ER для справки,
Это источники, которые я взял для справки
- Секвелизировать Find принадлежит Ассоциации ToMany
- Секвелизировать FindAll с ассоциацией ownToMany
- Как устранить неоднозначность между несколькими ассоциациями между одинаковыми моделями в Sequelize
- https://sequelize.org/master/class/lib/associations/belongs-to-many.js~BelongsToMany.html
- https://sequelize.readthedocs.io/en/v3/api/associations/belongs-to-many/