如何在Sequelize ORM

时间:2018-05-03 06:42:29

标签: node.js express sequelize.js

我在节点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'

4 个答案:

答案 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      
  });