Проблема ассоциации GraphQL - PullRequest
0 голосов
/ 04 февраля 2019

Перед тем, как погрузиться в код, я объясню мой вопрос на высоком уровне:

В моей схеме GraphQL у меня есть два корневых типа: Разработчики и Проекты .Я пытаюсь найти всех разработчиков, которые являются частью данного проекта.Запрос может выглядеть следующим образом:

{
  project(id:2) {
    title
    developers {
      firstName
      lastName
    }
  }
}

В настоящее время я получаю null значение для разработчиков .

Фиктивные данные

const developers = [
  {
    id: '1',
    firstName: 'Brent',
    lastName: 'Journeyman',
    projectIds: ['1', '2']
  },
  {
    id: '2',
    firstName: 'Laura',
    lastName: 'Peterson',
    projectIds: ['2']
  }
]

const projects = [
  {
    id: '1',
    title: 'Experimental Drug Bonanza',
    company: 'Pfizer',
    duration: 20,
  },
  {
    id: '2',
    title: 'Terrible Coffee Holiday Sale',
    company: 'Starbucks',
    duration: 45,
  }
]

Итак, Брент работал над обоими проектами.Лаура работала над вторым проектом.Моя проблема в функции resolve в ProjectType.Я пробовал много запросов, но ни один из них не работает.

ProjectType

const ProjectType = new GraphQLObjectType({
  name: 'Project',
  fields: () => ({
    id: { type: GraphQLID },
    title: { type: GraphQLString },
    company: { type: GraphQLString },
    duration: { type: GraphQLInt },
    developers: {
      type: GraphQLList(DeveloperType),

      resolve(parent, args) {           
        ///////////////////////
        // HERE IS THE ISSUE //
        //////////////////////
        return _.find(developers, { id: ? });
      }

    }
  })
})

DeveloperType

const DeveloperType = new GraphQLObjectType({
  name: 'Developer',
  fields: () => ({
    id: { type: GraphQLID },
    firstName: { type: GraphQLString },
    lastName: { type: GraphQLString }
  })
})

1 Ответ

0 голосов
/ 04 февраля 2019

Так что вам нужно вернуть всех разработчиков, у которых id текущего проекта в их .projectIds, верно?

Во-первых, _.find не может помочь, так как возвращает первый соответствующий элемент, и вам нужно получить массивс разработчиками (так как поле имеет тип GraphQLList).

Так как насчет

resolve(parent, args) {
    return developers.filter(
        ({projectIds}) => projectIds.indexOf(parent.id) !== -1
    );
}
...