Sequelize hasMany association returns 只有一个对象

Sequelize hasMany association returns only a single object

hasMany 协会应该return 对象列表,权利?我有一条 user 条记录和一些 connections 条记录与之相连。

型号connections:

userId: {
      field: 'user_id',
      type: DataTypes.STRING,
      allowNull: false
    }

型号users:

(users as any).associate = function associate(models: any) {
    models.users.hasMany(models.connections, {
      as: 'connections',
      foreignKey: 'user_id'
    });
  };

我通过将 connections 模型添加到 sequelize 查询参数来包含它:

include: [{ model: context.app.service('connections').Model, as: 'connections' }],

最终结果是 user 响应中的 connections 属性 是单个对象而不是对象数组。 我记录了 Sequelize 的查询执行,并直接在数据库中尝试了 Sequelize 为这个特定调用所做的原始查询,它 return 是一个记录列表,它应该如此。但是当我通过 API 查询它时,它 return 只是一个对象而不是数组。

原来来自 Sequelize 的查询需要标记为 raw。 因此,在 sequelize 对象中,您必须包含 raw: true 参数。不幸的是,这将导致返回一个 Sequelize 本机对象(具有 defaultValues 属性的对象)。您可以通过对 Sequelize 的结果调用 .get() 将其序列化为普通的 JavaScript 对象。

因此,总而言之,您必须在与 include 属性相同的级别上添加 raw: true,如下所示:

{
  include: [{ model: ...],
  raw: true 
}

固定:

.findAll({
   raw : false // <===
})

文档:https://sequelize.org/master/manual/raw-queries.html

// Only Set this to true if you don't have a model definition for your query.
raw: false,