Использование Objectionjs Как я могу выбрать определенные столбцы с помощью withGraphFetched

#mysql #orm #objection.js

#mysql #orm #objection.js

Вопрос:

У меня такой вопрос: как я могу указать, какие столбцы я хочу получить из базы данных с withGraphFetched помощью метода, у меня есть BelongsToOneRelation , и я хочу исключить некоторые столбцы, это моя модель:

 module.exports = class ProveedorModel extends Model {

  ...

  static relationMappings = {
    empresa: {
      relation: Model.BelongsToOneRelation,
      modelClass: EmpresaModel,
      join: {
        from: 'proveedor.empresa_id',
        to: 'empresa.id'
      }
    }
  };

  ...

}

 

и в моем контроллере у меня есть это:

 const payload = await ProveedorModel.query().withGraphFetched('empresa');
 

но в таблице empresa много столбцов, которых я не буду, так как я могу фильтровать?

Ответ №1:

вы можете указать filter свойство для своих отношений

 class Person extends Model {
  static relationMappings = {
    pets: {
      relation: Model.OneToManyRelation,
      modelClass: Animal,
      filter: query => query.select('id', 'ownerId', 'name'),
      join: {
        from: 'Person.id',
        to: 'Animal.ownerId'
      }
    }
  }
}
 

ссылка: https://github.com/Vincit/objection.js/issues/70#issuecomment-175143072

Просто интересно, почему objectionне запрашивает только столбцы, отображенные в tableMetadata (https://vincit.github.io/objection.js/api/model/static-methods.html#static-tablemetadata ) при использовании withGraphFetched , как это делается для withGraphJoined

В качестве альтернативы, вы можете сопоставить только те свойства, которые вы хотите, с помощью parsedatabasejson (https://vincit.github.io/objection.js/api/model/instance-methods.html#parsedatabasejson ) но ваш SQL-запрос принесет их все.