Hasura中的计算字段,返回一个整数数组

3

问题

我想添加一个计算字段,返回一个整数数组。Hasura当前支持的返回类型为SETOF <table-name>BASE类型。我尝试返回一个integer[],但失败了(它不是BASE类型)。是否有解决方法?

这是我尝试过的

我有两个表:courses和quizzes。一个course拥有多个quiz,每个quiz有一个名为difficulty的整数字段。 我想要向courses表中添加一个计算字段,列出相关quiz的不同难度。

使用SQL命令,可以创建一个产生此列表的数组:

SELECT array(SELECT DISTINCT difficulty FROM quizzes
  WHERE course_id = 1 ORDER BY difficulty ASC);

因此,我创建了一个函数来返回该查询的结果,并将其作为计算字段添加到课程表中。

CREATE OR REPLACE FUNCTION courses_quiz_difficulties(course_row courses)
RETURNS integer[] AS $$
  SELECT array(SELECT DISTINCT difficulty FROM quizzes
  WHERE course_id = course_row.id ORDER BY difficulty ASC);
$$
LANGUAGE SQL STABLE;

当我尝试添加计算字段时,因为整数数组不是基本类型,所以出现错误。

在表 "courses" 中,计算字段 "quiz_difficulties" 无法添加到表 "courses" 中,因为返回类型 _int4 的函数 "courses_quiz_difficulties" 不是基本类型

是否有一种方法可以解决它,并使其与 Hasura 兼容?

以下是相应的文档:

https://hasura.io/docs/1.0/graphql/manual/schema/computed-fields.html#supported-sql-functions

1个回答

4
一个简单的视图给了我想要的结果:
CREATE VIEW course_quiz_difficulties AS        
    SELECT 
        course_id, 
        array_agg(DISTINCT difficulty ORDER BY difficulty) as quiz_difficulties
    FROM quizzes GROUP BY course_id

接下来,我们可以手动在课程和新视图之间建立关系:

courses . id → course_quiz_difficulties . course_id

Hasura允许我们从courses中查询quiz_difficulties:

query MyCourseQuizDifficulties {
  courses(limit: 1) {
    id
    quiz_difficulties {
      quiz_difficulties
    }
  }
}

然后我们得到了这个结果:

{
  "data": {
    "courses": [
      {
        "id": 1,
        "quiz_difficulties": {
          "quiz_difficulties": [
            1,
            2
          ]
        }
      }
    ]
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接