我是新手续集并试图确定如何对一个属于自己的关系执行查询,我需要检查子关系是否存在,但我不想带任何字段。
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'
答案 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
}
}]
});