首页 > 解决方案 > 如何在 sequalize 中将相同的表数据与 where 子句一起包含两次?

问题描述

想要从特定用户的聊天表中获取聊天详细信息以及发件人和收件人详细信息(两者都是此应用程序的用户,因此用户详细信息存储在用户表中)我已经尝试过这个查询

聊天表有recipientId, senderId message, created_at& updated_at

id// 只是用户 id,他可以是发送者或接收者

 const result = await models.chat.findAll({
            where: {
                $or: [{
                    senderId: {
                        $eq: id
                    }
                }, {
                    recipientId: {
                        $eq: id
                    }
                }]
            }, include :[{
                model:models.User,
                as:'User'
            }]
        })

通过上面的查询,我只得到了收件人用户的详细信息,但我想同时获取两个用户的详细信息。

标签: postgresqlincludesequelize.jswhere-clause

解决方案


在这里,您可以通过使用关联定义 diff 别名来做到这一点:

chat.belongsTo(User, {as: 'sender', foreignKey : 'senderId'});
chat.belongsTo(User, {as: 'recipient', foreignKey : 'recipientId'});

await models.chat.findAll({
    where: {
        $or: [{
            senderId: { $eq: id }
        },{
            recipientId: { $eq: id }
        }]
    }, 
    include :[ 
        { model:models.User , as:'sender' },
        { model:models.User , as:'recipient' }
    ]
}) 

推荐阅读