Ich habe jetzt gerade mehr oder weniger 2 Stunden mit mehr oder weniger wildem Herumprobieren zugebracht und wollte eigentlich schon etwas entnervt aufgeben und das alles nur, weil ich nicht aufmerksam die Anleitung gelesen habe…

Damit mir – und vielleicht dem geneigten Leser – das nicht wieder passiert, jetzt hier dieser Beitrag.

Mein Problem drehte sich um die Collections Klasse des cakePHP3 Frameworks. Ich wollte einfach zwei ResultSets mit der praktischen append() Funktion miteinander verbinden. Ein ResultSet nutzt das CollectionsTrait und kann daher praktischerweise auch auf die ganzen Funktionen der Collection Klasse zugreifen. Das sieht dann so aus:

Über Sinn und Unsinn in dem obigen Beispiel bitte hinwegsehen. Die Ausgabe des $results sollte als json geschehen. Ich habe mir hierbei für den folgenden Weg entschieden:

Das Ergebnis war, dass das JSON allerdings immer nur Elemente aus dem Query1 Objekt enthielt. Ich habe dann testweise mit foreach über $result iteriert, da es sich um ein Traversable handelt und dort wurden mir auch korrekt Elemente aus Query1 und Query2 ausgegeben. Ich dachte jetzt schon, dass ich mittels foreach alle Elemente in ein neues Array packen muss, was ja wirklich alles andere als schön gewesen wäre. Daraufhin habe ich dann angefangen, wie eingangs erwähnt, wild einfach alles auszuprobieren, was mir in den Verstand kam.

Da entschloss ich mich ein letztes Mal Abschnitt Expanding Collections im CakePHP Kochbuch zu lesen. Und diesmal hab ich auch den roten Kasten mal richtig mit Verstand durchgelesen. Also habe ich meinen obigen Code hierhingehend geändert:

Bumm, alle Ergebnisse werden angezeigt!

Der Grund? toArray() überschreibt einfach die Schlüssel im resultierenden Array, da meine Objekte innerhalb der Collection vom selben Typen sind, toList() macht genau das nicht.

 



Kategorien: LDA - Test Product / Tutorials
Tags: / /

17. Juni 2016
Sebastian Köller

Verfasst von
Sebastian Köller