Как получить результат объединения данных без имени префиксной таблицы в Sequelize ORM - PullRequest
0 голосов
/ 03 мая 2018

Я использую sequelize ORM в узле js. Я соединяю две таблицы и получаю результат, но этот результат возвращается с именем таблицы в качестве префикса.

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_id' или 'role_name', мне не нужны данные этого типа, такие как 'role.role_id', 'role.role_name'

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Это должно работать,

db.admin.findAll({ 
    attributes: ['id', 'username', 'email', 'status', 'role.role_id', 'role.role_name'],
    include: [{ 
      model: db.role,                      
      where:{status : 'Active'}, 
      attributes: []
    }],
    raw: true
})

Я нашел это здесь

0 голосов
/ 30 декабря 2018

Модель верхнего уровня также можно изменить, чтобы исключить и включить свойства, если запрос все еще требуется использовать вместе с

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      
  });
0 голосов
/ 03 мая 2018

raw: true , вызывает проблему при возврате данных с ассоциациями, решение этого:

Удалить:

raw: true 

От:

db.admin.findAll({ 
    include: [{ 
      model: db.role,                      
      where:{status : 'Active'},     
    }],
    raw: true // <--------- Remove this   
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...