Sequelize hasMany 关联仅返回单个对象

问题描述 投票:0回答:3

hasMany
关联应该返回对象、权限列表?我有一个
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
模型添加到后续查询参数中来包含它:

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

最终结果是

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

sequelize.js feathers-sequelize
3个回答
0
投票

原来来自 Sequelize 的查询需要标记为

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

所以,总而言之,你必须将

raw: true
添加到与
include
属性相同的级别,如下所示:

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

0
投票

已修复:

.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,

0
投票

添加包含的表:- 子表

分开:正确

© www.soinside.com 2019 - 2024. All rights reserved.