Sequelize:为什么我得到Unhandled rejection SequelizeDatabaseError:列Receiver.receiver不存在

时间:2018-06-13 16:14:24

标签: sequelize.js

Sequelize似乎在寻找应该是Receiver.id的Receiver.receiver。我有一个Message实体,它由两个类型为User,receiver和sender的字段组成。

我尝试使用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方法的用法代码片段,并将hasOne更改为BelongstoOne。在我的代码中,我得到一个带有消息数据的套接字调用,然后将其存储在数据库中,然后在promise中检索Message并将其发送到作为接收者的套接字。 (注意:每条消息由两个用户组成,他们是发送者或接收者,并且有很多消息可以在同一个发送者和接收者之间)。

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);

        });



    });

1 个答案:

答案 0 :(得分:0)

更改

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在源中插入关联键   模型。