所以我有 user
模型和 admin
模型,它们被关联为 user n:1 admin
。定义 user
模型的代码如下:
// users.model.ts
const users = sequelize.define('users', {
...
adminId: {
field: 'admin_id',
type: DataTypes.BIGINT,
allowNull: true
},
...
});
(users as any).associate = function associate(models: any) {
models.users.belongsTo(models.admins);
};
return users;
和
admin
模型: // admins.model.ts
const admins = sequelizeClient.define('admins', {
...
});
(admins as any).associate = function associate(models: any) {
models.admins.hasOne(models.users);
};
return admins;
是否可以在关联中实现一些规则,或者一些 Sequelize hook f.e.
afterGet
将自动获取引用的记录?当我只查询 User 模型时,我想将
admin
对象作为 user
对象的一个属性。当我调用 User.findOne(123)
时,它将包含引用的 admin
记录的对象。基本上告诉 Sequelize 在获取 JOIN
记录时总是执行 user
。这在 Sequelize 中是可能的,还是我必须单独编写逻辑?
最佳答案
这就是使用关联来获取事物的原因。要将关系作为属性,您可以使用 eager loading :
const awesomeCaptain = await Captain.findOne({ where: { name: "Jack Sparrow" }, include: Ship }); // Now the ship comes with it console.log('Name:', awesomeCaptain.name); console.log('Skill Level:', awesomeCaptain.skillLevel); console.log('Ship Name:', awesomeCaptain.ship.name); console.log('Amount of Sails:', awesomeCaptain.ship.amountOfSails);
关于node.js - 在每个 GET 的 Sequelize 中自动包含引用模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60821299/