baginski
I'm new here

FS Integration: Abfrage, ob ein Datensatz einem anderen über eine Fremdschlüsselbeziehung (1:n) zugeordnet ist.

Hi,

ich möchte in einer Abfrage wissen, ob ein Datensatz einem anderen zugeordnet ist; konkretes Beispiel:

Zu jeder Veranstaltung gibt es genau Ort an dem diese stattfindet.

Ich möchte in einer umgekehrten Abfrage folgendes wissen: gib mir alle Orte, an denen mindestens eine Veranstaltung

stattfindet.

Bei Listen habe ich die Möglichkeit von <fsi:contains> bzw. <fsi:matches> gefunden; mit der ersten kann ich abfragen, ob

ein konkretes Objekt existiert (also nicht ganz passend), mit dem 2. konnte ich mir immerhin etwas basteln, in dem ich mir alle Veranstaltungen hole und den Abgleich bei jedem Durchgang gegen die komplette Veranstaltungsliste prüfe

<c:forEach items="${allLocations}" var="loc">
                            <fsi:matches list1="loc.eventsList" list2="allEvents" resultName="ismatch" />

</c:forEach>

Das funktioniert prinzipiell, elegant ist es m.E. aber nicht-  insbesondere würde ich gerne auf den entsprechenden query für "allEvents" verzichten wollen,da ich ihn and dieser Stelle normalerweise nicht benötige.

Ich habe auch mal geprüft, ob es möglichist, direkt an die Entity zu gehen

(Object eventList = locationEntity.get("eventsList");)

Das Objekt ist aber immer null.

Jemand eine Idee (vielleicht über die Query zur allLocations)?

Gruß,

Michael

0 Kudos
1 Reply
feddersen
Community Manager

So ganz ist mir der Anwendungsfall noch nicht klar, aber mal zwei generelle Hinweise, vielleicht helfen sie ja weiter:

1. "Gib mir alle Orte an denen mindenstens eine Veranstaltung stattfindet" kann man natürlich als eigene Abfrage formulieren. Abstrakt gesprochen so: SELECT * FROM ort LEFT JOIN veranstaltungen USING ( ForeignKey = PrimaryKey) WHERE veranstaltungen IS NOT NULL

2. Um herauszufinden, ob ein Datensatz eine Beziehung zu anderen Datensätzen hat, kann man einfach per Punktnotation der Kante folgen. Zum Beispiel: meinEvent.location.name würde von der Tabelle "Event" der Kante "location" folgen und die Spalte "Name" aus der Location-Tabelle ausgeben.  meineLocation.eventList würde die Liste aller verknüpften Events für die aktuelle Location enthalten. Darüber kann man iterieren oder auch mit .size() die Zahl der Elemente abfragen.

0 Kudos