【发布时间】:2021-09-08 08:54:29
【问题描述】:
我在多个表之间创建了一个关系,例如
- 垂直有很多用户
- 科技有很多用户
- 团队拥有并属于许多用户
因此,当从垂直休息 API 发送请求时,它没有技术和团队响应。 所有这些数据都包含在用户表的响应中,但我希望这些数据也都包含在单个表中。
所以我错过了什么? 如果没有,那么我该如何添加这些作为响应?
【问题讨论】:
标签: strapi
我在多个表之间创建了一个关系,例如
因此,当从垂直休息 API 发送请求时,它没有技术和团队响应。 所有这些数据都包含在用户表的响应中,但我希望这些数据也都包含在单个表中。
所以我错过了什么? 如果没有,那么我该如何添加这些作为响应?
【问题讨论】:
标签: strapi
好吧,让我解释一下你创建的关系:
您已链接:
Vertical => Users
Tech => Users
Team => Users
从上面可以清楚地看出,您已将所有关系链接到用户集合。所以strapi 会将id 中的users 集合添加到其他关系集合中。
因此,当您像下面那样执行find 时,书架默认情况下会尝试根据存储在users 集合中的id 获取并填充所有关系。
// this will fetch the related data also
await strapi.services.users.findOne({id: 1});
现在对如何通过查询其他集合来获取链接数据产生疑问,您将需要覆盖控制器中的 find 方法并使用 strapi.query('vertical').model 编写手动查询来进行连接并自己获取链接数据.
const result = await strapi
.query('vertical')
.model.query(qb => {
qb.join('users', 'users.vertical_id', '=', 'vertical.id');
qb.join('tech', 'tech.id', '=', 'users.tech_id');
qb.join('teams_user_relation', 'teams_user_relation.user_id', '=', 'users.id');
qb.join('teams', 'teams.id', '=', 'teams_user_relation.team_id');
})
.fetch();
const fields = result.toJSON();
【讨论】:
tech 与 users 集合存在 one to many 关系。只有teams 与users 存在多对多关系
Team 拥有并属于许多用户的团队数据。