Sho*_*v3_ 4 javascript postgresql node.js sequelize.js
我的关系定义如下:
device_data.belongsTo(models.device)
device.belongsTo(models.category)
category.belongsTo(models.role)
Run Code Online (Sandbox Code Playgroud)
我想要获取的是属于特定角色的所有设备数据。现在我有以下工作:
const query = {
include: [{
model: device,
attributes: ['id'],
include: [{
model: category,
attributes: ['id'],
include: [{
model: role,
attributes: ['id'],
where: {
id: {
[Op.eq]: roleId,
},
},
required: true,
}],
required: true,
}],
required: true,
}],
};
Run Code Online (Sandbox Code Playgroud)
显然,这会返回如下格式的数据:
{
"id": 1,
"created_timestamp": "2019-08-12T12:28:36.194Z",
"device_id": 1,
"device_value": 0,
"initiator_id": 2,
"device": {
"id": 1,
"category": {
"id": 1,
"role": {
"id": 1
}
}
}
},
Run Code Online (Sandbox Code Playgroud)
role嵌套在第三层和第四层的位置role.id。
我想要实现的是:
{
"id": 1,
"created_timestamp": "2019-08-12T12:28:36.194Z",
"device_id": 1,
"device_value": 0,
"initiator_id": 2,
"device": 1,
"category": 1,
"role": 1
},
Run Code Online (Sandbox Code Playgroud)
如果有人能给我一个提示或者可能是从续集生成这样的数据的查询,我将不胜感激。非常感谢。
小智 9
要禁用按模型嵌套,请raw: true在查询中使用。
要删除表名称前缀,请将属性重新定位到顶级模型,但添加表别名。
例如:
TopModel.find(
raw: true,
attributes :
[
'id', 'created_timestamp', // from main table
'device.id' // from included table
],
include [{
model: device,
attributes: [], // nothing at this level
}]
)
// etc, etc,
Run Code Online (Sandbox Code Playgroud)
我只是猜测这device是表别名。如果您收到错误消息(大致)“字段不存在”,请查阅生成的 SQL 以获取正确的别名。
| 归档时间: |
|
| 查看次数: |
3213 次 |
| 最近记录: |