Резолвер в графике по отношению - PullRequest
0 голосов
/ 26 марта 2019

Я хотел бы выполнить этот запрос, чтобы иметь все сегменты с определенным языком:

{
   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"
        }
      }
    ]
  }
}
...