【问题标题】:Sequelize: Why am i getting Unhandled rejection SequelizeDatabaseError: column Receiver.receiver does not existSequelize:为什么我收到未处理的拒绝 SequelizeDatabaseError:列 Receiver.receiver 不存在
【发布时间】:2018-06-13 16:14:23
【问题描述】:

Sequelize 似乎正在寻找应该是 Receiver.id 的 Receiver.receiver。我有一个消息实体,它由两个类型为用户标题的字段组成,接收者和发送者。

我尝试使用 Sequelize 像这样检索它

   Message.hasOne(User,{foreignKey: 'receiver', as: 'Receiver'});

Message.hasOne(User,{foreignKey: 'sender',as: 'Sender'});

User.belongsTo(Message);

Message.findOne({ where : {id:1},

    include: [{

        model: User,

        as: 'Receiver'

    },

        {

            model: User,

            as: 'Sender'

        }

    ]

}).then(function (message) {



});

可能是什么问题?

我在使用 findOne 方法的地方添加了代码 sn-p,并将 hasOne 更改为 BelongstoOne。在我的代码中,我得到一个带有消息数据的套接字调用,然后将其存储在数据库中,然后在 promise 中检索消息并将其发送到作为接收者的套接字。 (注意:每条消息由两个用户组成,他们要么是发送者,要么是接收者,并且有很多消息可以在同一个发送者和接收者之间)。

socket.on('send message', (data) => {

        //todo connect to the gambeat db and update the users info to online

        Message.create({

            time: moment.utc().format(),

            isread: false,

            message: data.message,

            messagestatus: 'DELIVERED',

            receiver: data.receiver.id,

            sender: data.sender.id,

        }).then(function(message) {

            Message.belongsTo(User,{foreignKey: 'receiver', as: 'Receiver'});

            Message.belongsTo(User,{foreignKey: 'sender',as: 'Sender'});

            Message.findOne({ where :

                {id: message.id},

                include: [{
                    model :User,
                    as: 'Receiver'},

                    {
                        model :User,
                        as: 'Sender'
                    }
                ]



            }).then(function (message) {


                var soc = users_socket.find(soc => Number(soc.uniqueId) === Number(data.receiver.id));

                soc.emit('disperse message', message);


            });




        }).catch(function(err) {

                console.log(err, err);

        });



    });

【问题讨论】:

    标签: sequelize.js


    【解决方案1】:

    更改:

    Message.hasOne(User,{foreignKey: 'receiver', as: 'Receiver'});
    Message.hasOne(User,{foreignKey: 'sender',as: 'Sender'});
    

    收件人:

    Message.belongsTo(User,{foreignKey: 'receiver', as: 'Receiver'});
    Message.belongsTo(User,{foreignKey: 'sender',as: 'Sender'});
    

    原因:

    HasOneBelongsTo 在不同的地方插入关联键 彼此的模型。 HasOne 在目标中插入关联键 模型而 BelongsTo 在源中插入关联键 型号。

    【讨论】:

    • isnt belongsTo 是一对一的关系,因为当我尝试使用同一个用户并将其保存到另一个消息实体时它会返回错误
    • Hasone 和 belongsto 工作方式相同,唯一的区别是插入外键
    • 好的好的,我会在当天晚些时候试一试,然后告诉你我得到了什么
    • 所以我试了一下,第一次插入有效,但在尝试另一次保存后,我得到“SequelizeAssociationError: You have used the alias Receiver in two different associations. Aliased association must have unique aliases.”
    • 请同时发布您的插入查询
    猜你喜欢
    • 2018-10-15
    • 2016-07-21
    • 2018-12-18
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2019-06-02
    • 2018-06-23
    • 2019-09-19
    相关资源
    最近更新 更多