Nová verze nw7 balíčku přináší rozšíření anotací entity o možnost definovat vlastní data a službu EntityPropertyCollectionResolver pro snadnější načtení dat odkazovaných z multiselect-entity.
Nový EntityPropertyCollectionResolver slouží pro snadnější práci s entitami odkazovanými přes multiselect. Typický případ použití je situace, kdy např. z entity článku potřebuji získat všechny jeho tagy ale tak, aby byly zabaleny v kolekci, nikoliv jako pole (za použití Collection::getEntitiesProperty()).
Příklad u ArticleEntity:
/** * @Property * @var ArticleArticleTagEntity[] * @ManyToMany(left) */ protected $articleArticleTagItems; /** * @var Collection|ArticleTagEntity[] * @ManualProperty(lazyLoad = propertyCollectionResolver) * @PropertyData(lazyLoadProperty = articleArticleTagItems->r) */ protected $tags;
Na entitě článku existuje property $articleArticleTagItems, která zpřístupňuje vazebni multiselect entitu. Doposud, pokud člověk chtěl získat všechny tagy, byla nejjednodušší kombinace volání $article->articleArticleTagItems->getEntitiesProperty('r'). Toto volání však vrací pole, což v určitých situacích nemuselo být žádoucí (jelikož vstup vyžadoval kolekci, tedy instanci Collection).
Nyní lze získání kolekce tagů zkrátit zadefinováním lazy-loadované property, kde v @PropertyData anotaci předáme resolveru informaci, z jaké posloupnosti entit má kolekcí načíst - viz property $tags a hodnota atributu @PropertyData: lazyLoadProperty = resolver načte kolekci MS entit pod property articleArticleTagItems a nad touto kolekcí volá metody getEntitiesProperty() a předává jí zbytek posloupnosti volání (v tomto případě pouze "r"). Ve výsledku tedy pod property $tags bude vždy kolekce entity (v tomto případě ArticleTagEntity).