Zum Inhalt springen

Extbase repository query unterobjekte filtern

Erstellt am 11. Februar 2014 · 5 Antworten · letzte Antwort am 15. September 2014

Tags: Frage

zeitgenosse ·

Hello,

stehe gerade auf dem schlauch.

Also ich habe ein Modell Garage, darin stehen Autos.

Jetzt kann ich mir ohne Probleme alle Autos welche in einer Garage stehen ausgeben lassen:

Autos Repository

$query->matching($query->equals('pid', $garage));

Ok, jetzt hat jedes Auto Bauteile (1:n Beziehung)

Die bekomme ich ja ganz automatisch vom Repository zurückgeliefert.

Jetzt haben aber die Bauteile noch einen Liferanten. Und ich hätte gerne alle Autos inklusive die Bauteile von Lieferant a, und zwar nur von Lieferant a.

Ginge sowas direkt im Auto Repoitory oder muss ich dies im Controller oder erst im Template filtern?

Grüsse

Velletti ·

Versucht habe ich das noch nicht über 3 Ebenenen,aber über 2:

Ich habe eine Tabelle mit Brettspielen (Modell: "Game"). Die Spiele habe als 1:n verknüpfung über die Relation game2auszeichnungen die Info, ob sie mal Spiel des Jahres waren, oder sonst irgend eine Auszwichnugn hatten (Modell Auszeichnungen): die Relation im Extension Builder habe ich "game2auszeichnungen" genannt.

wenn ich nun $value = "Spiel Des Jahres" an das Repository übergebe

$queries = $query->equals( "game2auszeichnungen.name", $value ) ;

du nun deine Relations so genannt haben solltest:
Auto2Bauteil und Bauteil2Lieferant könntest du über vermutlich so alle beutiele vom Hersteller hella ausliefern lassen. ( oder statt .name mit .id arbeiten udn dann die ID des Herstellers suchen lassen,

$queries = $query->equals( "Auto2Bauteil.Bauteil2Lieferant.name", "Hella" ) ;

Grüße
Jörg

zeitgenosse ·

Danke für deine Antwort. Dies geht leider nicht. Dann bekomme ich nur noch Autos zurück welche auch tatsächlich Bauteile von Lieferant a haben.

Ich will aber alle Autos.

zeitgenosse ·

Danke für deine Antwort. Dies geht leider nicht. Dann bekomme ich nur noch Autos zurück welche auch tatsächlich Bauteile von Lieferant a haben.

Ich will aber alle Autos.

Velletti ·

sorry frage richtig lesen :

da ist vermutlich tatsächlich das Tempalte der richtige ort

d.h. über den Controller den Lieferanten an das template übergeben z.b. als "filter.lieferant"

und dann im Template über vermutlcih derartiges Konstrukt ..:

<f:for each="{Autos}" as "{auto}">
<f:for each="{auto.bauteile}" as "{bauteil}">
<f:if condition="{bauteil.lieferant}={filter.lieferant}">

mischa ·

Etwas spät, aber vielleicht brauchts ja mal jemand anderes:

$query->equals('auto.bauteil.lieferant.uid', 1);

Holt dir alle Autos, deren Bauteile vom Lieferant mit der UID 1 stammen.