Sequelize 关系查询返回重复数据
我正在使用 Sequelize 关系查询指定客户的客户订单.
index.js
var results2 = await customerService.getOrders(1);控制台.log(结果2);
service.js
exports.getOrders = function (id) {返回 customerModel.findAll({生:真的,包括: [{型号:订单型号,其中:{ customer_idcustomer:id }}],}).then(r => r);};
结果
[ { idcustomer: 1,客户名称:'你好世界','orders.idorder': 1,'orders.orderdesc': '订单描述 1','orders.customer_idcustomer': 1 },{ id客户:1,客户名称:'你好世界','orders.idorder': 2,'orders.orderdesc': '测试 456','orders.customer_idcustomer': 1 },{ id客户:1,客户名称:'你好世界','orders.idorder': 3,'orders.orderdesc': '测试 123','orders.customer_idcustomer': 1 } ]
预期
[ { idcustomer: 1,客户名称:'你好世界','命令: [{'orders.idorder': 1,'orders.orderdesc': '订单描述 1','orders.customer_idcustomer': 1 },},{'orders.idorder': 2,'orders.orderdesc': '订单描述 2','orders.customer_idcustomer': 1 },},{'orders.idorder': 3,'orders.orderdesc': '订单描述 3','orders.customer_idcustomer': 1 },}]]
解决方案 你只需要从查询中删除 raw: true,
,
因为它将返回普通/平面对象,这会将您的对象转换为现在的样子.
exports.getOrders = function (id) {返回 customerModel.findAll({//raw: true,//<------ 删除这一行包括: [{型号:订单型号,其中:{ customer_idcustomer:id }}],}).then(r => r);};
<小时><块引用>
注意:您应该根据您的要求将 where 条件放在上层逻辑
exports.getOrders = function (id) {返回 customerModel.findAll({其中: { id: id } ,//raw: true,//<------ 删除这一行包括: [{型号:订单型号}]}).then(r => r);};
I'm querying customer orders for a specified customer using Sequelize relationships.
index.js
var results2 = await customerService.getOrders(1);
console.log(results2);
service.js
exports.getOrders = function (id) {
return customerModel.findAll({
raw: true,
include: [{
model: orderModel,
where: { customer_idcustomer: id }
}],
}).then(r => r);
};
results
[ { idcustomer: 1,
customername: 'hello world',
'orders.idorder': 1,
'orders.orderdesc': 'order description 1',
'orders.customer_idcustomer': 1 },
{ idcustomer: 1,
customername: 'hello world',
'orders.idorder': 2,
'orders.orderdesc': 'Test 456',
'orders.customer_idcustomer': 1 },
{ idcustomer: 1,
customername: 'hello world',
'orders.idorder': 3,
'orders.orderdesc': 'Test 123',
'orders.customer_idcustomer': 1 } ]
expected
[ { idcustomer: 1,
customername: 'hello world',
'orders: [{
'orders.idorder': 1,
'orders.orderdesc': 'order description 1',
'orders.customer_idcustomer': 1 },
},
{
'orders.idorder': 2,
'orders.orderdesc': 'order description 2',
'orders.customer_idcustomer': 1 },
},
{
'orders.idorder': 3,
'orders.orderdesc': 'order description 3',
'orders.customer_idcustomer': 1 },
}]
]
解决方案
All you need is to remove raw: true,
from query ,
as it will return plain/flat object , and that will convert your object as it looks now.
exports.getOrders = function (id) {
return customerModel.findAll({
// raw: true, // <------ Just remove this line
include: [{
model: orderModel,
where: { customer_idcustomer: id }
}],
}).then(r => r);
};
Note : You should put the where condition in upper level as per your logic
exports.getOrders = function (id) {
return customerModel.findAll({
where: { id: id } ,
// raw: true, // <------ Just remove this line
include: [{
model: orderModel
}]
}).then(r => r);
};
相关文章