Aber damit erhalte ich nur noch drei von sechs Produkten?
Irgendeine Idee warum?
Ist das der richtige Weg, um die products-Association zu begrenzen?
Oder ist das überhaupt der richtige Weg, um eine bestimmte Produkt-ID in der Association auszuschließen?
Interessanterweise tritt dies nicht bei allen Produkt-Kategorie-Kombinationen auf.
Während ich immer dieselbe Kategorie abrufe, ändert sich die ausgeschlossene Produkt-ID, und für einige erhalte ich vier Produkte in der Association und für andere aber nur drei?
Ich weiß, dass es hier „früher“ mal einen unsinnige Defaultwert gab, mittlerweile werden aber immer alle untergeordneten Werte zurückgeliefert.
Vermutlich funktioniert das ->setLimit(4); auf der Association nicht wirklich. In SQL ist das dann ja ein Join. Und der Join selbst hat ja kein Limit sondern „nur“ die finale Ergebnis-Tabelle.
Fragt sich aber warum und in den untergeordneten Association überhaupt ein Limit brauchst ?
Ich habe mir gedacht, dass wir mit dem Limit vermeiden, unnötig mehr Produkte auszulesen, wenn ich nur vier brauche.
Ich könnte das Limit auf 5 setzen.
Dann bekomme ich auch mit diesem „Quirk“ immer mindestens vier Produkte und im Template Rendering begrenze ich das dann auf vier.
Ich fände es aber schöner, wenn ich direkt nur maximal vier bekomme.
Eine andere Lösung wäre, zuerst die CategoryEntity zu holen und dann separat die ProductCollection, anstatt als Association.
Aber wenn es schon dieses nette Association-Feature gibt, dann möchte ich das auch nutzen.
Die Idee ist übrigens folgende:
Wir wollen auf einer Produktdetailseite eine Kategorieseite verlinken, zu der das Produkt zugeordnet ist (plus weitere Konditionen).
Außerdem sollen vier weitere Produkte aus dieser Kategorie vorgestellt werden, außer natürlich dem Produkt, auf dem wir uns gerade befinden.
Das funktioniert alles, aber wie gesagt, mit dem setLimit(4) auf der products-Association bekommen wir manchmal nur drei Produkte.
dann würde ich das eher so machen, dass man zunächst mit „plain SQL“ nur die ids „selected“ und damit dann in den ORM. Hier kannst Du dann einfach das limit verwenden.
Ich hatte das Problem vorher mal, bei einer Order, die dann die OrderItems als Association liefert. Dann waren die Items dann irgendwann nicht vollständig bei „größeren“ Bestellungen. Das Problem ist dann aber, das ja eigentlich das Ganze eine Paginierung ist. Also braucht man halt auch ein skip; nur genau das gibt es hier überhaupt nicht …