node.js - 在每个 GET 的 Sequelize 中自动包含引用模型

标签 node.js sequelize.js

所以我有 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/

相关文章:

windows - 在 Windows 上运行 grunt.cmd 的多个问题

javascript - 从 Node.js POST 到 PHP

javascript - Sequelize : TypeError: Cannot read property '_modelAttribute' of undefined

javascript - 插入一个字母大写字母时,Sequelize 返回小写字母?

javascript - PostgreSQL + Sequelize + array_append 错误

javascript - 查找数组中子级的父级

mysql - 使用sequelize插入mysql中的两个依赖表

node.js - node.js 中的 webRTC

node.js - 开发服务器和 API 之间的 ECONNRESET 代理错误

node.js - 如何使用 React Native 像 Node.js 一样获取 `__dirname`