Автоматически сгенерированная мутация не создает отношений - PullRequest
0 голосов
/ 10 июля 2020

Я хочу протестировать автоматически сгенерированные мутации CRUD, созданные вызовом makeAugmentedSchema из 'neo4j-graphql- js'. Нет проблем с созданием узлов, но создание отношений для меня не работает. Сообщите, пожалуйста, что я здесь делаю неправильно.

Схема:

type Bio{
    id: ID!
    description: String
}

type Person{
    id: ID!
    name: String
    dob: Date
    gender: String
    bioRelation: [Bio] @relation(name: "HAS_BIO", direction: "OUT")
}

Мутация: Я следую указаниям по интерфейсным мутациям https://grandstack.io/docs/graphql-interface-union-types, чтобы создать мутацию.

mutation {
    p: CreatePerson(
        name: "Anton",
        gender: "Male") {
    name
    gender
    id
  }
    b: CreateBio(
        description: "I am a developer") {
    description
        id
  }
  r: AddPersonBioRelation(
    from: {id: "p"},
    to:{id: "b"}
  ){
    from{
      name
    }
    to{
      description
    }
  }
}

Он создает узлы Person и Bio, но между ними не создается никаких отношений:

{
  "data": {
    "p": {
      "name": "Anton",
      "gender": "Male",
      "id": "586b63fd-f9a5-4274-890f-26ba567c065c"
    },
    "b": {
      "description": "I am a developer",
      "id": "a46b4c22-d23b-4630-ac84-9d6248bdda89"
    },
    "r": null
  }
}

Вот как выглядит AddPersonBioRelation: введите описание изображения здесь

Спасибо.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Я новичок в GRANDstack, и я сам боролся с этими типами проблем. Я обычно разбивал эту мутацию на отдельные мутации (в javascript) и использовал возвращаемое значение для каждой в качестве значений для следующей мутации. например:

await createIncident({
  variables: {
    brief: values.brief,
    date,
    description: values.description,
    recordable: values.recordable,
    title: values.title
  }
}).then((res) => {
  addIncidentUser({
    variables: {
      from: user.id,
      to: res.data.CreateIncident.id
    }
  });
});

проблема, которую я вижу в приведенном вами примере, заключается в том, что вы указываете строковое значение для from и to как «p» и «b» соответственно, а НЕ p. id и b.id возвращают значения из родительских мутаций.

я могу указать на это, но то, что я не могу понять за ЖИЗНЬ, - это как правильно ссылаться на p.id и b. id в самой мутации. другими словами, вы пытаетесь отправить

from: { id: "586b63fd-f9a5-4274-890f-26ba567c065c"}
to: { id: "a46b4c22-d23b-4630-ac84-9d6248bdda89" } 

, но на самом деле вы отправляете

from: { id: "p"}
to: { id: "b" } 

, которые на самом деле не являются ссылками в neo4j, поэтому он не работает.

если мы сможем выяснить, как правильно ссылаться на p.id и b.id, мы должны заставить это работать.

0 голосов
/ 16 июля 2020

Спасибо, @dryhurst. Похоже, что нет возможности ссылаться на идентификатор вновь созданных узлов, но я нашел решение, введя свойство временного идентификатора. Пожалуйста, смотрите обсуждение этого вопроса и окончательное решение по адресу:

https://community.neo4j.com/t/auto-generated-mutation-does-not-create-relationship/21412/16.

...