我在节点js中使用sequelize ORM。我加入两个表并获得结果,但结果以表名作为前缀返回。
var Sequelize = require('sequelize');
var sequelize = new Sequelize('test', 'root', '', {
// configuration
}
});
const db = {};
db.Sequelize = Sequelize;
db.sequelize = sequelize;
db.role = require('./../model/definitions/role')(sequelize, Sequelize);
db.admin = require('./../model/definitions/admin')(sequelize, Sequelize);
db.admin.findAll({
include: [{
model: db.role,
where:{status : 'Active'},
}],
raw: true
}).then(function(result) {
console.log(result);
}).catch(function(error) {
console.log(error);
}).done();
现在我得到了这个结果:
[{
"id": 36,
"email": "test@gmail.com",
"username": "test",
"status": "Active",
"role.role_id": 1,
"role.role_name": "Admin"
}]
但我需要这个结果:
[{
"id": 36,
"email": "test@gmail.com",
"username": "test",
"status": "Active",
"role_id": 1,
"role_name": "Admin"
}]
那么,如何从列中删除前缀表名'role'。 我只需要'role_id'或'role_name'不需要像'role.role_id'这样的类型数据,'role.role_name'
答案 0 :(得分:2)
这应该有效,
db.admin.findAll({
attributes: ['id', 'username', 'email', 'status', 'role.role_id', 'role.role_name'],
include: [{
model: db.role,
where:{status : 'Active'},
attributes: []
}],
raw: true
})
我找到了这个here
答案 1 :(得分:2)
这应该有效
A
是一个表,该表使用名为B
的列与bId
关联,因此B具有一个与{{1}相关联的主键Id
bid
表中的}列在标准结果集中显示为A
,但我们希望将这两列称为b.id
Id & Name
答案 2 :(得分:0)
raw: true ,
在返回带关联的数据时导致问题,解决方法是:
删除:
raw: true
来自:
db.admin.findAll({
include: [{
model: db.role,
where:{status : 'Active'},
}],
raw: true // <--------- Remove this
})
答案 3 :(得分:0)
如果查询仍想与
一起使用,还可以修改顶级模型以排除和包括属性。raw: true
db.admin.findAll({
include: [{
model: db.role,
where:{status : 'Active'},
attributes: ["role_id", "role_name"],
nested: false,
}],
attributes: {exclude: [],
include: ["role.role_id", "role.role_name"]},
raw: true
});
此外,您也可以使用别名
db.admin.findAll({
include: [{
model: db.role,
where:{status : 'Active'},
attributes: [["role_id", "roleId"], ["role_name", "roleName"]]
}],
attributes: {exclude: [],
include: ["role.roleId", "role.roleName"]},
raw: true
});