У меня есть таблица «Студенты» в моей базе данных (postgress with Hasura) с отношением «многие ко многим» с «Subjects»:
type Student = {
id: uuid
name: String
subjects: [subject]
}
type Subject = {
id: uuid
name: String
}
У меня есть Статический QUERY1:
query FilteredStudents($subjects: [String!]) {
students(where: { subjects: { name: { _in: $subjects } } }) {
id
name
}
}
e.g.:
$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
}
Моя единственная идея заключалась в создании таких динамических запросов:
Dynamic QUERY2 (новый запрос создается (во время выполнения) каждый раз, когда изменяется массив $ subject):
query FilteredStudents {
students(where: { _and: [
subjects: { name: { _eq: "Math" } }
subjects: { name: { _eq: "English" } }
subjects: { name: { _eq: "Physics" } }
]}) {
id
name
}
}
Но мне бы очень хотелось этого избежать и найти какое-то статичное решение. Есть ли способ добиться этого с помощью фильтров, предлагаемых Hasura? (https://hasura.io/docs/1.0/graphql/manual/queries/query-filters.html#)
Query 1
, а затем отфильтруйте их на клиенте 2. Добавьте все отношения в столбецhasSubjects
JSON и затем отфильтруйте следующим образом hasura.io/docs/1.0/graphql/manual/queries/ - person moto   schedule 06.05.2020