정수 배열을 반환하는 계산 된 필드를 추가하려고합니다. Hasura는 현재 SETOF <table-name>
또는 BASE
유형 중 하나의 반환 유형을 지원 합니다. 나는 반환을 시도했지만 integer[]
실패했습니다 ( BASE
유형 이 아닙니다 ). 해결 방법이 있습니까?
두 개의 테이블이 있습니다. 코스와 퀴즈, 코스에는 퀴즈가 많고, 각 퀴즈에는 난이도라는 정수 필드가 있습니다. 관련 퀴즈의 뚜렷한 난이도를 나열하는 계산 된 필드를 코스 테이블에 추가하고 싶습니다.
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;
계산 된 필드를 추가하려고하면 int 배열이 BASE 유형이 아니기 때문에 오류가 발생합니다.
"courses"테이블에서 : 계산 된 필드 "quiz_difficulties"에서 : 유형 _int4를 반환하는 "courses_quiz_difficulties"함수가 BASE 유형이 아니기 때문에 계산 된 필드 "quiz_difficulties"를 테이블 "courses"에 추가 할 수 없습니다.
Hasura와 함께 작동 할 수있는 방법이 있습니까?
다음은 해당 문서입니다.
https://hasura.io/docs/1.0/graphql/manual/schema/computed-fields.html#supported-sql-functions
간단한보기로 내가 원하는 결과를 얻었습니다.
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를 사용하면 다음에서 quiz_difficulties를 쿼리 할 수 있습니다 courses
.
query MyCourseQuizDifficulties {
courses(limit: 1) {
id
quiz_difficulties {
quiz_difficulties
}
}
}
그리고 우리는이 결과를 얻습니다 :
{
"data": {
"courses": [
{
"id": 1,
"quiz_difficulties": {
"quiz_difficulties": [
1,
2
]
}
}
]
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다