Sequelize получить неизвестный столбец в ассоциации ToTany - PullRequest
0 голосов
/ 13 марта 2020

У меня есть три модели 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 для справки,

ER diagram reference

Это источники, которые я взял для справки

  1. Секвелизировать Find принадлежит Ассоциации ToMany
  2. Секвелизировать FindAll с ассоциацией ownToMany
  3. Как устранить неоднозначность между несколькими ассоциациями между одинаковыми моделями в Sequelize
  4. https://sequelize.org/master/class/lib/associations/belongs-to-many.js~BelongsToMany.html
  5. https://sequelize.readthedocs.io/en/v3/api/associations/belongs-to-many/

1 Ответ

0 голосов
/ 13 марта 2020

Что ж, я так понимаю, у вас плохое членство ToMany здесь ... которое предполагает много ко многим, а у вас его нет ... Таблица пользователей канала должна объединять только канал и пользователя ... у вас должна быть таблица присоединения к беседе пользователя, которая является многим для многих ... и сам канал будет просто hasMany для разговора, поскольку беседа может фактически принадлежать только одному каналу.

...