javascript Strapi v4:填充时无关系字段

gpfsuwkq  于 2022-10-30  发布在  Java
关注(0)|答案(3)|浏览(233)

我尝试使用关系名称(categories)和populate参数组合来填充特定关系,但它没有填充categories
当我查看我的模式时,我看到关系字段出现在属性对象中,但是我仍然在响应中只得到非关系字段。
我尝试了Strapi文档中提到的每一种组合,但都不起作用。
find权限也会针对正在填入的内容类型启用,在本例中为categories

/api/products?populate=*
/api/products?populate[0]=categories
/api/products?populate[categories]=*

我的产品模式

{
  "kind": "collectionType",
  "collectionName": "products",
  "info": {
    "singularName": "product",
    "pluralName": "products",
    "displayName": "Product",
    "description": ""
  },
  "options": {
    "draftAndPublish": true
  },
  "pluginOptions": {},
  "attributes": {
    "title": {
      "type": "string"
    },
    "images": {
      "type": "media",
      "multiple": true,
      "required": false,
      "allowedTypes": [
        "images"
      ]
    },
    "categories": {
      "type": "relation",
      "relation": "oneToMany",
      "target": "api::category.category"
    }
  }
}

系统

  • Strapi版本:4.1.8
  • NPM版本:8.3.2
  • Node.js版本:16.13.2
  • 数据库:MySQL
z0qdvdin

z0qdvdin1#

编辑:其他选择是使用strapi marketplace的populate deep,只需安装,配置默认深度,然后在您需要深度的每个请求上添加填充:深的
您必须在控制器内部填充,如Strapi documentation中所示

查询引擎API:正在填充

strapi.db.query('api::article.article').findMany({
 populate: true,
});

实体服务API:正在填充

const entries = await strapi.entityService.findMany('api::article.article', {
  populate: '*',
});

REST API:填充和字段选择

const qs = require('qs');
const query = qs.stringify({
  fields: ['title', 'body'],
}, {
  encodeValuesOnly: true,
});

如果您想填充所有内容,只需使用populate:'*'
如果要填充一个或多个关系,请使用填充:[关系一,关系二]

c8ib6hqw

c8ib6hqw2#

还需要对产品启用查找权限,需要对所有关系(或子表)设置查找权限。
使用“role”选项。

u3r8eeie

u3r8eeie3#

作为示例如果要根据某些条件从数据库中提取数据并填充一个关系

const transactions = await strapi
        .query("api::transaction.transaction")
        .findMany({
          where: { user: userId },
          populate: { offer: true },
        });

这里是结果

如果要填充所有关系

const transactions = await strapi
        .query("api::transaction.transaction")
        .findMany({
          where: { user: userId },
          populate: "*",
        });

相关问题