Я хотел бы выполнить этот запрос, чтобы иметь все сегменты с определенным языком:
{
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"
}
}
]
}
}
schema.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;
resolvers.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.log('resolver id', id);
const where = {id: bucket.fk_language_id };
if (id) {
where.id = id
}
return Language.findOne({
where: where,
});
},
}
};
export default resolvers;
connectors.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 | имя | код | is_active
Ковш
id | fk_language_id | код | создал_ат | 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"
}
}
]
}
}