使用 Objection JS 如何使用 withGraphFetched 选择特定列

jon*_*blo 0 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'
      }
    }
  };

  ...

}

Run Code Online (Sandbox Code Playgroud)

在我的控制器中我有这个:

const payload = await ProveedorModel.query().withGraphFetched('empresa');
Run Code Online (Sandbox Code Playgroud)

但表empresa有很多我不会的列,那么我该如何过滤呢?

小智 6

您可以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'
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

参考: https: //github.com/Vincit/objection.js/issues/70#issuecomment-175143072

只是想知道为什么反对在使用时不只查询tableMetadatahttps://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 查询将带来所有这些属性。