我们如何从 MikroORM 中的嵌套表中过滤字段

How can we filter fields from nested tables in MikroORM

我 运行 遇到了一些困难,试图弄清楚如何 return 从嵌套连接中选择字段。

所以在我的实体中,我有一个“餐厅” 与“产品”有 1:M 关系。 “产品”与“类别”有 M:M 关系。“类别”与“菜单”有 M:M 关系。

现在我正在使用此代码段 return 填充了类别和菜单的所有产品:

const place = await this.placeRepo.findOne(placeID, {
  populate: ['products.categories.menus'],
});

问题是它 return 包含产品、类别和菜单的所有字段,这是非常不必要的。基本上只有 uuid & title 是必需的。所以我想 return 这样的数据:

  [
 {
    "uuid": "tCj6soMp6YWcJosTxvjJ1",
    "title": "Burger 2",
    "categories": [
        {
            "uuid": "JUwta7kMG1-DUARA3Tnan",
            "title": "Pizza",
            "menus": [
                {
                    "uuid": "tohzpXtkAN-mW646sphE1",
                    "titleOfMenu": "Lunch",
                }
            ]
        }
    ]
},

]

例如,我已经尝试过此代码段来确定产品 return 的字段,但它不起作用,我不知道如何解决它:

const place = await this.placeRepo.findOne(placeID, {
  populate: ['products.categories.menus'],
  fields: ['products', 'products.title']
});
  

抛出以下错误:“类型错误:无法读取未定义的 属性‘0’”

如何 return 从嵌套的填充实体中选择字段?我们是否必须改用查询构建器,还是我在这里遗漏了一些简单的东西?

更新到版本 5.0.2 并将代码更改为此!实际上甚至不需要指定“填充”,因为 mikro orm 会自动为您填充它们。

  const place = await this.placeRepo.findOne(placeID, {
      fields: [
        'products',
        'products.title',
        'products.categories.title',
        'products.categories.menus',
        'products.categories.menus.titleOfMenu',
           ],
      });