【问题标题】:Strapi not including relational data in responseStrapi 不包括响应中的关系数据
【发布时间】:2021-09-08 08:54:29
【问题描述】:

我在多个表之间创建了一个关系,例如

  • 垂直有很多用户
  • 科技有很多用户
  • 团队拥有并属于许多用户

因此,当从垂直休息 API 发送请求时,它没有技术和团队响应。 所有这些数据都包含在用户表的响应中,但我希望这些数据也都包含在单个表中。

所以我错过了什么? 如果没有,那么我该如何添加这些作为响应?

【问题讨论】:

    标签: strapi


    【解决方案1】:

    好吧,让我解释一下你创建的关系:

    您已链接

    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();
    
    更多信息请参考strapi中的Custom Queries

    【讨论】:

    • 谢谢,但是在这个技术中是多对多关系,所以 user.tech_id 不会在用户表中。
    • 但是在您的问题中,您已经声明 techusers 集合存在 one to many 关系。只有teamsusers 存在多对多关系
    • 是的,我的意思是Team 拥有并属于许多用户的团队数据。
    • 好的。查询将遵循类似的路线。您必须在数据透视表/关系表上进行连接。我已经用这个更新了我的答案。请检查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-30
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 2022-12-15
    • 1970-01-01
    相关资源
    最近更新 更多