Zum Inhalt springen

Join in Extbase?

Erstellt am 13. März 2012 · 1 Antwort · letzte Antwort am 13. März 2012

Tags: Frage

zitronenbaum ·

Hallo zusammen ich kämpfe mit einem Extbase problem. Ich habe zwei Models. Picture und Album. Das Model Album hat beliebig viele Pictures. Zusätzlich hat aber noch jedes Album ein Coverphoto. In jedem Album ist die Id des Coverphotos abgelegt.

Nun meine Frage. Wenn ich eine List mit allen Albums ausgebe, dann erhalte ich natürlich auch die jeweilige Cover-ID des albums zurück. Da dies aber erst die ID ist und noch icht das bild muss ich ich in der pictures tabelle danach suchen.

Wie lässt sich das am elegantesten lösen ohne das ich im albums controller für jedes album nochmals ein query absetzen muss welches mit das zugehörige bild ausliest?

Gibt es z.B eine Möglichkeit mit einem Join direkt bei der Abfrage aller Albums noch die entsprechenden Felder der Pictures tabelle auszulesen?

Anbei mein Controllercode

	public function listAction() {
		$albums = $this->albumRepository->findAll();
                // Hier würde ich gerne die albums objekte noch mit informationen
                // aus einem anderen model anreichern

		$this->view->assign('albums', $albums);

	}

Ich habe mir überlegt ob das allenfalls so geht

		foreach ($albums as $album){

		$alb[] = $this->pictureRepository->findOneByFbPhotoId($album->getCoverPhoto());
		
		}

allerdings habe ich dann das problem zwei arrays zu haben zum einen.. meine albums und zum anderen das $alb[] array... und das dann wieder sinnvoll zusammenzuknöpfen ist auch nicht optimal... super wäre für mich wenn ich gleich alles in meinem $albums array hätte.

Für Tips wäre ich super dankbar.
Danke, Gruss Michi

igorshmigor ·

Eigentlich solltest Du keinen join manuell erstellen müssen.
Wenn Du im Extension Builder mit dem Domain Modeller "Album" als aggregate root definierst und darin eine Relation zu Coverphoto anlegst, dann müsste das Coverphoto bereits über Album abrufbar sein.
Sagen wir die Relation zum Model "Coverphotos" heißt albumcovers, und Coverphotos hat eine Eigenschaft image, die Du abrufen möchstest, dann könnte Dein Fluid-Template in etwa so aussehen:

<f:for each="{albums}" as="album">
  <f:for each="{album.albumcovers}" as="albumcover">
    {albumcover.image}
  </f:for>
</f:for>

Ich hoffe, dass ich Dich richtig verstanden habe und Dir dies weiterhilft.