【问题标题】:Sequelize hasMany association returns only a single objectSequelize hasMany 关联只返回一个对象
【发布时间】:2020-04-30 21:17:04
【问题描述】:

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 模型添加到 sequelize 查询参数中来包含它:

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

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

【问题讨论】:

    标签: sequelize.js feathers-sequelize


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      固定:

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

      【讨论】:

        猜你喜欢
        • 2020-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多