Sequelize формат ответа на запрос соединения - PullRequest
0 голосов
/ 15 марта 2019

я следующие модели, определенные для Sequelize

const brand = sequelize.define('brands', {
    brand_id: {
        type: Sequelize.UUID,
        primaryKey: true
    },
    name: Sequelize.STRING
}, {
    timestamps: false,
        underscored: true
});

const model = sequelize.define('models', {
    model_id: {
        type: Sequelize.UUID,
        primaryKey: true
    },
    name: Sequelize.STRING
}, {
    timestamps: false,
    underscored: true
});

model.belongsTo(brand, {foreignKey: 'brand_id'});

Я использую этот код для запроса базы данных

model.findOne({
    raw: true,
    where: {name: 'TIPO'},
    include: brand})
.then(car => {
    console.log(car);
});

И он возвращает строки, отформатированные как это

{ model_id: '7e5a29ba-05b1-45f7-9fee-41f8440fe975',
  name: 'TIPO',
  brand_id: 'f3e4962c-906f-46c4-b992-7375ab46002a',
  'brand.brand_id': 'f3e4962c-906f-46c4-b992-7375ab46002a',
  'brand.name': 'FIAT' }

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

{ model_id: '7e5a29ba-05b1-45f7-9fee-41f8440fe975',
  model_name: 'TIPO',
  brand_name: 'FIAT' }

Есть ли способ добиться, чтобы он работал, как это? * * 1013

Ответы [ 2 ]

1 голос
/ 15 марта 2019

Вам необходимо использовать параметр атрибутов

model.findOne({
    raw: true,
    where: {name: 'TIPO'},
    include: {
      model: model.brand,
      attributes: [ 'name' ], // represents brand.name
      }
    })
.then(car => {
    const newCar = car;
    // if you want to change/rename the object properties around, do so here via newCar
    console.log(newCar);
});

Возможно, вы захотите изменить имя в модели бренда на bName или brandName, чтобы избежать путаницы.

0 голосов
/ 15 марта 2019

Вам необходимо добавить атрибуты как для модели, так и для марки ... без них вы увидите все поля (например, SELECT *).Взгляните на документ

...