当前位置: 首页 > 知识库问答 >
问题:

Laravel Lighthouse GraphQL从连接三个表的透视表中查询数据

狄新立
2023-03-14

在Laravel Lighthouse GraphQL中,如何从中间“透视”表检索信息?

假设我在一个belongTomany关系中有用户和角色:

type User {
  roles: [Role!]! @belongsToMany
}

type Role {
  users: [User!]! @belongsToMany
}

type Query {
    user(id: ID! @eq): User @find
    role(id: ID! @eq): Role @find
}

并且还假设中间表User\u Role包含列“created\u at”和“tag\u id”
我将如何在查询中包含“created_at”
如何获取标记id所指的标记?

共有1个答案

薛霄
2023-03-14

我发现你可以这样做:

首先,确保User模型中的关系调用-

class User extends Model {
    public function roles(): BelongsToMany
    {
        return $this->belongsToMany(\App\Models\Role::class, 'User_Role')
                    ->using(User_Role::class) // only needed to retrieve the tag from the tag_id
                    ->withPivot('created_at', 'tag_id');
    } 
}

为扩展透视的中间表创建一个类:

class User_Role extends Pivot
{
    public function tag(): BelongsTo
    {
        return $this->belongsTo(\App\Models\Tag::class, 'tag_id');
    }
}

现在更改GraphQL代码,如下所示:

type User {
    id: ID!
    roles: [Role!] @belongsToMany
}

type Role {
    id: ID!
    pivot: UserRolePivot # this is where the magic happens
}

type UserRolePivot {
    created_at: Date!
    tag: Tag! @belongsTo
}

type Tag {
    id: ID!
    name: String!
}

现在您可以这样查询:

{
  users {
    id
    roles {
      id
      pivot {
        created_at
        tag {
          id
          name
        }
      }
    }
  }
}

 类似资料:
  • 问题内容: 我想显示给定下表的数据透视表(交叉表)。 桌子: 插入: 现在,我想显示上述数据的数据透视表,如下所示: 预期结果 : 说明 :我想显示的每个员工都有,这是目前所有员工,节目中有多少组的员工可用,必须显示该员工在其他的也GROUP_NAME没有分配给哪些可用最后必须以数据透视格式显示。 问题答案: SELECT * FROM crosstab( $$SELECT grp.*, e.gr

  • 问题内容: 我的MySQL数据库具有以下列标题: 我有兴趣根据typeOfWork和月份显示结果。例如,所有typeOfWork条目将显示在左侧的第一列中,并且每个字段将在每一列的指定月份总计该特定typeOfWork。因此,我的SQL数据透视表语句当前为: 我目前遇到语法错误,指定了最后一行(从’DEC到ROLLUP’)。我感到困惑的原因是,我只是从脚本中的另一个工作枢轴表改编了该表。我认为差异

  • 问题内容: 问题1: 我有一个具有以下结构和数据的表: 我想以以下格式显示这些记录: 我知道我需要使用交叉表/数据透视查询来获得此显示。为此,我基于对它的有限知识对其进行了尝试。以下是我的查询: 根据此查询,我得到以下显示: 任何人都可以帮助我对查询进行适当的更改以获取单行而不是如上所述的多行记录。 问题2: 还有一种方法可以获取特定字段的值作为列的名称。正如你可以在上面看到我有,,…作为标题。取

  • 问题内容: 我正在使用此查询: 产生以下结果: 我改变了场CAT_ID到一个名为新表包含的字段,,。我如何通过也加入该表来编写新查询,以获得与上述相同的结果? 我是数据库新手,需要帮助。提前致谢 问题答案: 试试这个: 这个想法很简单,在新表中的第一个字段是工作作为 代理键 ,它没有任何与其他两个表之间的关系。然后,我们来到了另外两个领域是哪些,这些你应该映射到关系的其他两个方面。 您不能使用新模

  • 在我的Laravel应用程序中,我有三个数据库表,分别称为users、projects和roles。它们之间存在m:n关系,所以我也有一个称为PROJECT_USER_ROLE的透视表。透视表包含user_id、project_id和role_id列。请参见MySQL工作台的屏幕截图。 我的用户、项目和角色模型得到了如下定义的归属关系: 现在我可以很容易地获得通过身份验证的用户的项目: 对此的回应

  • 问题内容: 我正在尝试一次从三个表中检索数据。这些表如下所示: 类别 讯息 评论 我想要得到的是1条消息(因为我有一个基于id的子句),3个类别(因为有3个类别链接到消息)和2条注释(因为有2条注释链接到消息)。 我正在尝试使用以下查询来检索数据: 但是,当运行此查询时,我得到6个结果: 在我预期结果如下的地方: 只有三行,我应该能够获取所有需要的数据。这有可能吗?我做错了吗?? 问题答案: 如评