Sequelize查询属于不包括子属性的属性

时间:2018-04-07 01:17:02

标签: sequelize.js has-and-belongs-to-many

我是新手续集并试图确定如何对一个属于自己的关系执行查询,我需要检查子关系是否存在,但我不想带任何字段。

  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部分之外,这对我来说是无用的。

没有“原始查询”,最好的方法是什么? 我正在寻找,基本上:

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'

2 个答案:

答案 0 :(得分:0)

而不是:

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

答案 1 :(得分:0)

重新迭代以将其标记为解决方案。

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

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