Megosztás a következőn keresztül:


Entitáskapcsolatok a Data API Builderben

Az entitáskapcsolatok lehetővé teszik a GraphQL-lekérdezések számára a kapcsolódó entitások közötti áthaladást, így összetett adatalakzatok hozhatók létre egyetlen lekérdezéssel. Például:

{
  books {
    items {
      id
      title
      authors {
        items {
          first_name
          last_name
        }
      }
    }
  }
}

Ennek eléréséhez a DAB-nak el kell mondania, hogyan kapcsolódnak az entitások a relationships konfigurációs fájl szakaszán keresztül.

Konfiguráció

Entitások közötti kapcsolat definiálása:

  • Használja az relationships objektumot az entitáskonfigurációban.
  • Adja meg a target.entity nevet.
  • Állítsa be a cardinality elemet "one" vagy "many" értékre.
  • Igény szerint adja meg source.fields és target.fields.
  • Több a többhöz viszonyok modellezéséhez használja a linking.object-t az illesztési tábla felfedése nélkül.

Példa parancssori felületre

dab update Book \
  --relationship authors \
  --target.entity Author \
  --cardinality many \
  --relationship.fields "id:id" \
  --linking.object "dbo.books_authors" \
  --linking.source.fields "book_id" \
  --linking.target.fields "author_id"

Példa konfigurációra

"Book": {
  "source": "dbo.books",
  "relationships": {
    "authors": {
      "cardinality": "many",
      "target.entity": "Author",
      "source.fields": [ "id" ],
      "target.fields": [ "id" ],
      "linking.object": "dbo.books_authors",
      "linking.source.fields": [ "book_id" ],
      "linking.target.fields": [ "author_id" ]
    }
  }
}

Egy a többhöz

  • A számosság "many" használata.
  • Példa: A Series-nak sok Books.
  • A DAB kikövetkezheti a mezőket, ha létezik idegen kulcs.
dab update Series \
  --relationship books \
  --target.entity Book \
  --cardinality many

Több az egyhez

  • Számosság "one" használata.
  • Példa: A Book az egyikhez Seriestartozik.
dab update Book \
  --relationship series \
  --target.entity Series \
  --cardinality one

Több-a-többhöz (kapcsoló objektum)

  • Használjon olyan kapcsolótáblát, amely nem érhető el a GraphQL-ben.
  • A mezők forrásból célhoz való csatolásának definiálása az illesztési táblán keresztül.
dab update Author \
  --relationship books \
  --target.entity Book \
  --cardinality many \
  --relationship.fields "id:id" \
  --linking.object "dbo.books_authors" \
  --linking.source.fields "author_id" \
  --linking.target.fields "book_id"

Több a többhöz (explicit kapcsoló entitás)

  • Tegye elérhetővé a kapcsolótáblát GraphQL-objektumként.
  • Adjon meg kapcsolatokat mindhárom entitáson.
dab add BookAuthor \
  --source dbo.books_authors \
  --permissions "anonymous:*"

dab update BookAuthor \
  --relationship book \
  --target.entity Book \
  --cardinality one \
  --relationship.fields "book_id:id"

dab update BookAuthor \
  --relationship author \
  --target.entity Author \
  --cardinality one \
  --relationship.fields "author_id:id"

Kölcsönös kapcsolatok

Ha mindkét irányban engedélyezni szeretné a navigációt (például a BookAuthor forrás és AuthorBooka célmező között), adjon meg egy második kapcsolatot a cél entitáson, amely megfordítja a forrás- és célmezőket.

példa

dab update Author \
  --relationship books \
  --target.entity Book \
  --cardinality many \
  --relationship.fields "id:id" \
  --linking.object "dbo.books_authors" \
  --linking.source.fields "author_id" \
  --linking.target.fields "book_id"

Ez párosul a Book-től Author-ig tartó kapcsolattal, és lehetővé teszi a szimmetrikus bejárást a GraphQL-ben.

{
  authors {
    items {
      first_name
      books {
        items {
          title
        }
      }
    }
  }
}

GraphQL-támogatás

  • A kapcsolódó mezők beágyazott objektumokként jelennek meg.
  • A számosság határozza meg, hogy egy lista vagy egy objektum lesz-e visszaadva.
  • A GraphQL-típusnevek és -mezők egyeznek a konfiguráció nevével.

Korlátozások

  • A kapcsolatok megkövetelik, hogy az entitások ugyanabban a konfigurációs fájlban létezhessenek.
  • Csak az egyszeri ugrásos navigáció támogatott.
  • A ciklusok és a mély beágyazások nincsenek optimalizálva.
  • A REST nem támogatja a kapcsolatokat (csak GraphQL).