Inverse relation issue

We’re using inverse relations to link support topics to support articles. The support articles have a single relation to a related topic. We’re using the inverse relation on the topic to get the related articles.

When using this query below we’re getting related articles but there are a lot of duplicates returned and not all of the articles are being sent.

query:

query MyQuery {
  page(filter: {slug: {eq: "testpagina-van-wietse"}}) {
    title
    sections {
      ... on SupportSectionRecord {
        __typename
        id
        supportItems {
          ... on SupportTopicCollectionRecord {
            __typename
            id
            supportTopic {
              title
              _allReferencingSupportArticles {
                __typename
                id
                title
                slug
                topic {
                  slug
                  title
                }
              }
            }
          }
        }
      }
    }
  }
}

response:

{
  "data": {
    "page": {
      "title": "Testpagina van Wietse",
      "sections": [
        {
          "__typename": "SupportSectionRecord",
          "id": "IizO0orcSKeHbaeeCLj1fw",
          "supportItems": [
            {
              "__typename": "SupportTopicCollectionRecord",
              "id": "frslJi5bQeOMIKTy3W9AZw",
              "supportTopic": {
                "title": "Afwerking",
                "_allReferencingSupportArticles": [
                  {
                    "__typename": "SupportArticleRecord",
                    "id": "aDjMl3LLSb-z6zTjIXS9kw",
                    "title": "Hoeveel plaats moet je vrijlaten voor het Floorify aanpassingsprofiel? ",
                    "slug": "hoeveel-plaats-moet-je-vrijlaten-voor-het-floorify-aanpassingsprofiel",
                    "topic": {
                      "slug": "afwerking",
                      "title": "Afwerking"
                    }
                  },
                  {
                    "__typename": "SupportArticleRecord",
                    "id": "B-uMmeyRRySyLEvBkiNSzg",
                    "title": "Hoeveel plaats moet je vrijlaten voor het Floorify eindprofiel? ",
                    "slug": "hoeveel-plaats-moet-je-vrijlaten-voor-het-floorify-eindprofiel",
                    "topic": {
                      "slug": "afwerking",
                      "title": "Afwerking"
                    }
                  },
                  {
                    "__typename": "SupportArticleRecord",
                    "id": "FlU1MdngSjGdvrvMk45U1Q",
                    "title": "Hoeveel plaats moet je vrijlaten voor het Floorify overgangsprofiel? ",
                    "slug": "hoeveel-plaats-moet-je-vrijlaten-voor-het-floorify-overgangsprofiel",
                    "topic": {
                      "slug": "afwerking",
                      "title": "Afwerking"
                    }
                  },
                  {
                    "__typename": "SupportArticleRecord",
                    "id": "OfLJn3ZkQdeHvkb38NHhqQ",
                    "title": "Hoe plaats je een aanpassingsprofiel bij een vinyl vloer?",
                    "slug": "hoe-plaats-je-een-aanpassingsprofiel-bij-een-vinyl-vloer",
                    "topic": {
                      "slug": "plaatsing",
                      "title": "Plaatsing"
                    }
                  },
                  {
                    "__typename": "SupportArticleRecord",
                    "id": "OfLJn3ZkQdeHvkb38NHhqQ",
                    "title": "Hoe plaats je een aanpassingsprofiel bij een vinyl vloer?",
                    "slug": "hoe-plaats-je-een-aanpassingsprofiel-bij-een-vinyl-vloer",
                    "topic": {
                      "slug": "plaatsing",
                      "title": "Plaatsing"
                    }
                  },
                  {
                    "__typename": "SupportArticleRecord",
                    "id": "OfLJn3ZkQdeHvkb38NHhqQ",
                    "title": "Hoe plaats je een aanpassingsprofiel bij een vinyl vloer?",
                    "slug": "hoe-plaats-je-een-aanpassingsprofiel-bij-een-vinyl-vloer",
                    "topic": {
                      "slug": "plaatsing",
                      "title": "Plaatsing"
                    }
                  },
                  {
                    "__typename": "SupportArticleRecord",
                    "id": "OfLJn3ZkQdeHvkb38NHhqQ",
                    "title": "Hoe plaats je een aanpassingsprofiel bij een vinyl vloer?",
                    "slug": "hoe-plaats-je-een-aanpassingsprofiel-bij-een-vinyl-vloer",
                    "topic": {
                      "slug": "plaatsing",
                      "title": "Plaatsing"
                    }
                  },
                  {
                    "__typename": "SupportArticleRecord",
                    "id": "OfLJn3ZkQdeHvkb38NHhqQ",
                    "title": "Hoe plaats je een aanpassingsprofiel bij een vinyl vloer?",
                    "slug": "hoe-plaats-je-een-aanpassingsprofiel-bij-een-vinyl-vloer",
                    "topic": {
                      "slug": "plaatsing",
                      "title": "Plaatsing"
                    }
                  },
                  {
                    "__typename": "SupportArticleRecord",
                    "id": "OfLJn3ZkQdeHvkb38NHhqQ",
                    "title": "Hoe plaats je een aanpassingsprofiel bij een vinyl vloer?",
                    "slug": "hoe-plaats-je-een-aanpassingsprofiel-bij-een-vinyl-vloer",
                    "topic": {
                      "slug": "plaatsing",
                      "title": "Plaatsing"
                    }
                  },
                  {
                    "__typename": "SupportArticleRecord",
                    "id": "WDGthaSLSOKHgc4kU4IBBg",
                    "title": "Kan je de vloer voorleggen zonder profielen?",
                    "slug": "kan-je-de-vloer-voorleggen-zonder-profielen",
                    "topic": {
                      "slug": "afwerking",
                      "title": "Afwerking"
                    }
                  },
                  {
                    "__typename": "SupportArticleRecord",
                    "id": "YzBJVBUeQ_eS376tNqdp_Q",
                    "title": "Hoe kan je rigide vinyl vloer afwerken? ",
                    "slug": "hoe-kan-je-rigide-vinyl-vloer-afwerken",
                    "topic": {
                      "slug": "afwerking",
                      "title": "Afwerking"
                    }
                  },
                  {
                    "__typename": "SupportArticleRecord",
                    "id": "DsQTYrDBTJ2-KFWNISQXpQ",
                    "title": "Welk profiel kan je waar gebruiken?",
                    "slug": "welk-profiel-kan-je-waar-gebruiken",
                    "topic": {
                      "slug": "afwerking",
                      "title": "Afwerking"
                    }
                  }
                ]
              }
            },
            {}
          ]
        },
        {}
      ]
    }
  }
}

Am I overlooking something or no fully grasping the concept of the inverse relations? Thanks in advance :smiley:

Hey @thomas.habets,

Is this for your “Floorify” project? If so, it looks to me like your “Support Topics” model has several different relationships to “Support Articles”:

  • Inside the sections modular content field, in a “Support section” block in the field support_items
  • Inside the Taxonomies fieldset, in the topic field

If you want to limit it to just one or the other, you can use the through operator, like this:

query MyQuery {
  allSupportTopics(locale: nl_BE) {
    id
    slug
    title
    _allReferencingSupportArticles(
      first: "100"
      through: {fields: {anyIn: supportArticle_topic}}
    ) {
      __typename
      id
      title
      slug
      topic {
        slug
        title
      }
    }
  }
}

That should limit the lookup to the inverse relationships defined in the topic field. That should get you a list of all the support topics, and for each topic, the articles that reference it through their topic field.

Does that help? Or could you please explain what it is you wanted to do?

It’s not super clear to me how the sections were meant to be used together with your topic.

Hi @roger I didn’t realise that was the way it works. I implemented your solution and it works like a charm. Thank you for clarifying!

1 Like