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