Strapi调用vertical表REST API未返回tech、team关联数据如何解决
Strapi 单表返回关联数据解决方案
第一步:排查配置遗漏问题
先确认以下两项配置是否完成:
- 检查反向关联是否配置:你目前仅在user表中配置了正向关联,需要分别在三个单表侧添加对应的反向关联,才能在单表接口中查询到关联链路数据
- vertical表添加多对一关联指向user表
- tech表添加多对一关联指向user表
- team表添加多对多关联指向user表
- 所有关联字段需要开启「在API响应中显示」的开关
- 检查关联字段权限:进入「设置→用户与权限插件→角色」,找到你调用接口使用的角色(公共/已认证),确认对应单表的find、findOne权限下,关联字段的读取权限已经勾选
第二步:配置无误时添加关联返回逻辑
Strapi REST API默认不会返回嵌套关联数据,有两种实现方案可选:
方案1:单次请求指定关联
调用接口时添加populate参数手动指定要加载的关联,示例:
# 查vertical列表,同时返回关联user、user对应的tech和team GET /api/verticals?populate[user][populate]=tech,team # 快速返回所有层级的2级以内关联,可用通配符 GET /api/verticals?populate=*
注意:
populate=*最多仅返回2级嵌套关联,超过2级的关联必须手动指定层级
方案2:配置控制器默认返回关联
如果希望每次调用对应单表接口都自动返回关联数据,无需每次传参,修改对应单表的控制器即可:
- 打开项目路径
/src/api/[表名]/controllers/[表名].js,以vertical表为例路径为/src/api/vertical/controllers/vertical.js - 替换代码添加默认populate配置:
'use strict'; const { createCoreController } = require('@strapi/strapi').factories; module.exports = createCoreController('api::vertical.vertical', ({ strapi }) => ({ async find(ctx) { ctx.query = { ...ctx.query, populate: { user: { populate: ['tech', 'team'] } } }; return super.find(ctx); }, async findOne(ctx) { ctx.query = { ...ctx.query, populate: { user: { populate: ['tech', 'team'] } } }; return super.findOne(ctx); } }));
tech、team表按相同逻辑修改对应控制器即可。
内容的提问来源于stack exchange,提问作者Chirag S Modi
相关产品推荐
相关产品推荐

