Sequelize query belongstomany 不包括子属性

Sequelize query belongstomany not including child attributes

我是 sequelize 的新手,并试图确定如何对 belongstomany 关系执行查询,我需要检查子关系是否存在,但我不想带入它的任何字段。

  Project.belongsToMany(models.User, {
        through: 'userproject', as: 'links', foreignKey: 'project_id', otherKey: 'user_id'
    });

我的尝试:

  const linkedProjects = this.model.findAll({
        attributes: ['Project.*'],
        include: [{
            model: models.User,
            as: 'links',
            where: {
                userid: user.sub
            }
        }]
    });

然而,这个 stil 给我带来了预测的链接数据,除了 where 部分之外,这对我来说毫无用处。

在没有 "raw query" 的情况下实现该目标的最佳方法是什么? 我正在寻找,基本上:

select p.* from project p 
inner join userproject up on p.project_id = up.project_id 
inner join user u on up.user_id = u.id
where u.userid = 'xxx'

而不是这个:

attributes: ['Project.*'], // this will load only fields from project table

使用

this.model.findAll({
    attributes: ['id','title',...], // all the attributes from project table
    include: [{
        model: models.User,
        attributes: ['id','project_id' ,], // all the attributes from user table
        as: 'links',
        where: {
            userid: user.sub
        }
    }]
});

//OR 

// remove attributes from all
this.model.findAll({
    include: [{
        model: models.User,
        as: 'links',
        where: {
            userid: user.sub
        }
    }]
});

Re-iterating 将其标记为解决方案。

解决方案是添加 attributes: [] 以在 sequelize 操作中不检索任何列。 attributes 字段是一个包含列名的数组,在执行 sequelize 操作时必须检索这些列名。

  const linkedProjects = this.model.findAll({
        attributes: ['Project.*'],
        include: [{
            model: models.User,
            as: 'links',
            attributes: [],
            where: {
                userid: user.sub
            }
        }]
    });