Я хотел бы выполнить этот запрос, чтобы иметь все ведра с определенным языком:
{
buckets{
id,
code,
language(id:1){
code
}
}
}
Но у меня есть такой ответ:
{
"data": {
"buckets": [
{
"id": 1,
"language": {
"code": "FR"
}
},
{
"id": 2,
"language": {
"code": "FR"
}
},
{
"id": 3,
"language": "FR" <= Real value "EN"
},
{
"id": 4,
"language": "FR" <= Real value "EN"
}
]
}
}
Я хотел бы, чтобы было выбрано только ведро с идентификатором языка:
{
"data": {
"buckets": [
{
"id": 1,
"language": {
"code": "FR"
}
},
{
"id": 2,
"language": {
"code": "FR"
}
}
]
}
}
схема.js
import { gql } from 'apollo-server';
export const typeDefs = gql`
# Language
type Language {
id: Int!
name: String
code: String
is_active: Boolean
}
# Bucket
type Bucket {
id: Int!,
code: String
language(id: Int): Language
}
# query for types
type Query {
buckets: [Bucket]
}
schema {
query: Query
}
`;
export default typeDefs;
разрешители.js
import GraphQLDate from 'graphql-date';
import { Bucket, Language } from './connectors';
export const resolvers = {
Date: GraphQLDate,
Query: {
buckets(_, args) {
return Bucket.findAll({
where: args,
order: [['created_at', 'DESC']],
});
}
},
Bucket: {
language(bucket, {id}) {
console.info('resolver id', id);
const where = {id: bucket.fk_language_id };
if (id) {
where.id = id
}
return Language.findOne({
where: where,
});
},
}
};
export default resolvers;
коннекторы.js
...
// define language
const LanguageModel = db.define('language', {
name : {type: Sequelize.STRING},
code : {type: Sequelize.STRING},
is_active: {type: Sequelize.BOOLEAN}
});
// define bucket
const BucketModel = db.define('bucket', {
code : {type: Sequelize.STRING},
is_active: {type: Sequelize.BOOLEAN}
});
BucketModel.belongsTo(LanguageModel, {
foreignKey: 'fk_language_id'
});
LanguageModel.hasMany(BucketModel, {
foreignKey: 'id'
});
...
Моя база данных очень проста, всего две таблицы Language и Bucket.
База данных
Язык
id | name | code | is_active
Ведро
id | fk_language_id | code | created_at | updated_at
С этим запросом:
{
buckets{
id,
language{
code
}
}
}
У меня есть этот результат:
{
"data": {
"buckets": [
{
"id": 1,
"language": {
"code": "FR"
}
},
{
"id": 2,
"language": {
"code": "FR"
}
},
{
"id": 3,
"language": {
"code": "EN"
}
},
{
"id": 4,
"language": {
"code": "EN"
}
}
]
}
}
Вы получаете «id» в своем распознавателе? Потому что я не вижу никакого «ввода» в схеме.
@masmerino Я обновил свой код простым запросом без определенного идентификатора языка
давайте проведем быстрый тест: не могли бы вы изменить свой запрос на него: { Buckets(filter: language: {id: 1}){ id, language {code} } }
Prisma и grapql таким образом поддерживают классные фильтры :)
@masmerino Я пытался выполнить {bucks(filter: language: {id: 1}){id, language{code} } }, но ничего, запрос не запускается
давай, я попробую что-нибудь еще
@AmitBhoyar в моей схеме у меня есть это: type Bucket {id: Int!, code: String language(id: Int): Language}
@JérémieChazelle, на данный момент не уверен, но, упустив из виду, я думаю, вы хотите фильтровать по списку сегментов, а не по списку языков, поэтому, где должно быть предложение в Bucket.findAll({where:{id: yourId}}). Также схема должна отправлять фильтр на верхний уровень (сегмент).
@AmitBhoyar, у вас есть пример с кодом, пожалуйста?


вы уверены, что это происходит, когда вы включаете идентификатор в запрос? ``` если (id) { где.id = id } ```