У меня есть таблица «Студенты» в моей базе данных (postgress с Hasura) с отношением многие ко многим с «Субъектами»:
type Student = {
id: uuid
name: String
subjects: [subject]
}
type Subject = {
id: uuid
name: String
}
У меня есть Stati c QUERY1 :
query FilteredStudents($subjects: [String!]) {
students(where: { subjects: { name: { _in: $subjects } } }) {
id
name
}
}
Например:
$subjects = ['Math', 'English', 'Physics']
Он найдет всех студентов, которые посещают ЛЮБОЙ из этих классов. Например:
const student1 = {
id: 1,
name: 'Mike',
subjects: ['Physics', 'Chemistry'] // subjects mapped to names for simplicity
}
Моя проблема в том, что мне нужен другой запрос, который найдет всех учеников, которые посещают КАЖДЫЙ из этих классов.
Так что это не должно получить student1 , но следует выбирать студентов следующим образом:
const student2 = {
id: 2,
name: 'Walt',
subjects: ['Math', 'English', 'Physics', 'Some', 'other', 'subjects'] // subjects mapped to names for simplicity
}
Моя единственная идея заключалась в создании динамических c запросов, таких как:
Dynami c QUERY2 (новый запрос генерируется (в время выполнения ) каждый раз, когда изменяется массив $ subject):
query FilteredStudents {
students(where: { _and: [
subjects: { name: { _eq: "Math" } }
subjects: { name: { _eq: "English" } }
subjects: { name: { _eq: "Physics" } }
]}) {
id
name
}
}
Но я бы очень хотел этого избежать и найти некоторые данные c решение. Есть ли способ достичь этого, используя фильтры, предлагаемые Hasura? (https://hasura.io/docs/1.0/graphql/manual/queries/query-filters.html#)