问题描述
hasMany
关联应该返回一个对象列表,对吗?我有一个 user
记录和一些与之相连的 connections
记录.
The hasMany
association should return a list of object, rights? I have a user
record and a few connections
records connected to it.
模型连接
:
userId: {
field: 'user_id',
type: DataTypes.STRING,
allowNull: false
}
模型用户
:
(users as any).associate = function associate(models: any) {
models.users.hasMany(models.connections, {
as: 'connections',
foreignKey: 'user_id'
});
};
我通过将 connections
模型添加到 sequelize 查询参数中来包含它:
I include the connections
model by adding it to the sequelize query params:
include: [{ model: context.app.service('connections').Model, as: 'connections' }],
最终结果是 user
响应中的 connections
属性是单个对象而不是对象数组.我记录了 Sequelize 的查询执行,并直接在数据库中尝试了 Sequelize 为这个特定调用执行的原始查询,它返回了一个记录列表,正如它应该的那样.但是当我通过 API 查询它时,它只返回一个对象而不是一个数组.
The end result is that the connections
property in the user
response is a single object instead of an array of objects.I logged the Sequelize’s query executions and tried directly in the DB the raw query that Sequelize does for this particular call and it returns a list of records, as it should. But when I query it through the API, it returns just a single object instead of an array.
推荐答案
原来 Sequelize 的查询需要标记为 raw
.因此,在 sequelize
对象中,您必须包含 raw: true
参数.不幸的是,这将导致返回一个 Sequelize 本机对象(具有 defaultValues
属性的对象).您可以通过对 Sequelize 的结果调用 .get()
将其序列化为普通的 JavaScript 对象.
Turns out the query from Sequelize needs to be marked as raw
.So, in the sequelize
object, you gotta include the raw: true
param. This will, unfortunately, result in returning a Sequelize native object (the one that has the defaultValues
prop). You can get it serialized into a normal JavaScript object by calling .get()
on the result from Sequelize.
因此,总而言之,您必须在 include
属性的同一级别上添加 raw: true
,如下所示:
So, to sum up, you gotta add raw: true
on the same level as the include
prop, like so:
{
include: [{ model: ...],
raw: true
}
这篇关于Sequelize hasMany 关联只返回一个对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!