如何在 Sequelize 中从同一个 table 急切加载多个外键行?
How do I eager load multiple foreign key rows from the same table, in Sequelize?
我有一个数据库 table Template
,它存储 created_by
、updated_by
和 deleted_by
的用户 ID。所有三个引用 table User
。我正试图将所有三个用户作为完整对象加载到模板对象中,但我根本不知道如何做。我找到的所有 include
文档在定义预加载关系时仅指模型名称。但在这种情况下,returns 只是一个用户,每个模板对象中的属性被命名为 User
而不是预期的三个 createdBy
、updatedBy
和 deletedBy
.
我试图找出一种通过列名或其他引用来包含的方法。我也尝试包括所有,但同样,一个用户属性和其他三个整数键显示为值。
getTemplateList = async (req, res, t) => {
const templateList = await Template.findAll({
transaction: t,
include: { all: true }
});
return {status: 201, content: templateList};
}
模板中的相关关系定义:
this.belongsTo(User, {
foreignKey: {
as: 'createdBy',
field: 'created_by',
allowNull: false
},
});
this.belongsTo(User, {
foreignKey: {
as: 'updatedBy',
field: 'updated_by',
allowNull: false
},
});
this.belongsTo(User, {
foreignKey: {
as: 'deletedBy',
field: 'deleted_by',
allowNull: true
},
});
用户中的相关关系定义:
this.hasMany(Template, {
foreignKey: {
as: 'createdBy',
field: 'created_by',
allowNull: false
},
});
this.hasMany(Template, {
foreignKey: {
as: 'updatedBy',
field: 'updated_by',
allowNull: false
},
});
this.hasMany(Template, {
foreignKey: {
as: 'deletedBy',
field: 'deleted_by',
allowNull: true
},
});
我已经尝试过使用和不使用 as
属性
您在 foreignKey
选项内的关联中指明了别名,而不是在 foreignKey
选项旁边指明它们:
this.belongsTo(User, {
foreignKey: {
field: 'created_by',
allowNull: false
},
as: 'createdBy',
});
this.belongsTo(User, {
foreignKey: {
field: 'updated_by',
allowNull: false
},
as: 'updatedBy',
});
this.belongsTo(User, {
foreignKey: {
field: 'deleted_by',
allowNull: true
},
as: 'deletedBy',
});
User
协会也是如此。
我有一个数据库 table Template
,它存储 created_by
、updated_by
和 deleted_by
的用户 ID。所有三个引用 table User
。我正试图将所有三个用户作为完整对象加载到模板对象中,但我根本不知道如何做。我找到的所有 include
文档在定义预加载关系时仅指模型名称。但在这种情况下,returns 只是一个用户,每个模板对象中的属性被命名为 User
而不是预期的三个 createdBy
、updatedBy
和 deletedBy
.
我试图找出一种通过列名或其他引用来包含的方法。我也尝试包括所有,但同样,一个用户属性和其他三个整数键显示为值。
getTemplateList = async (req, res, t) => {
const templateList = await Template.findAll({
transaction: t,
include: { all: true }
});
return {status: 201, content: templateList};
}
模板中的相关关系定义:
this.belongsTo(User, {
foreignKey: {
as: 'createdBy',
field: 'created_by',
allowNull: false
},
});
this.belongsTo(User, {
foreignKey: {
as: 'updatedBy',
field: 'updated_by',
allowNull: false
},
});
this.belongsTo(User, {
foreignKey: {
as: 'deletedBy',
field: 'deleted_by',
allowNull: true
},
});
用户中的相关关系定义:
this.hasMany(Template, {
foreignKey: {
as: 'createdBy',
field: 'created_by',
allowNull: false
},
});
this.hasMany(Template, {
foreignKey: {
as: 'updatedBy',
field: 'updated_by',
allowNull: false
},
});
this.hasMany(Template, {
foreignKey: {
as: 'deletedBy',
field: 'deleted_by',
allowNull: true
},
});
我已经尝试过使用和不使用 as
属性
您在 foreignKey
选项内的关联中指明了别名,而不是在 foreignKey
选项旁边指明它们:
this.belongsTo(User, {
foreignKey: {
field: 'created_by',
allowNull: false
},
as: 'createdBy',
});
this.belongsTo(User, {
foreignKey: {
field: 'updated_by',
allowNull: false
},
as: 'updatedBy',
});
this.belongsTo(User, {
foreignKey: {
field: 'deleted_by',
allowNull: true
},
as: 'deletedBy',
});
User
协会也是如此。