[TYPO3-mvc] Using repository inside an entity

Henrik Møller Rasmussen info at hmrdesign.dk
Sun Apr 25 21:48:38 CEST 2010


Hello Franz,

Thanks for your reply.

My first thought was to create this method in the ItemRepository.. But 
the situation is, that I want to loop through all categories, rendering 
items inside each category. But each category should only be rendered if 
it contains items for sale.

The way I solved it was by creating this getItemsForSale method on the 
categories. Now I could condition on category.itemsForSale, and loop 
through them easily afterward. I couldn't figure out a solution that did 
this using the repository.

Does it make sense what I just described?

- Henrik

On 25/04/10 15.31, Franz Koch wrote:
> Hey,
>
>> /**
>> * Returns all items for sale in this category
>> *
>> * @return
>> Tx_Extbase_Persistence_ObjectStorage<Tx_Dabmarket_Domain_Model_Item>
>> */
>> public function getItemsForSale() {
>> $this->itemRepository =
>> t3lib_div::makeInstance('Tx_Dabmarket_Domain_Repository_ItemRepository');
>> return $this->itemRepository->findForSaleByCategory($this);
>> }
>
> I see one big problem with this: repeated calls. Assume a FLUID template
> like this:
>
> <f:if condition="{f:count(subject: myObject.itemsForSale)}">
> <f:for each="{myObject.itemsForSale}" as="item">do something</f:for>
> </f:if>
>
>
> In such a situation every use of the property "itemsForSale" will
> trigger your method and thus fetch the items over and over again from
> the repository, so you should consider making use of some internal "cache".
> A better approach might be to move all the logic with the cache etc to a
> dedicated service and only call this service from inside your model.
>
> $this->myService->getItemsForSaleByProduct($this);
>



More information about the TYPO3-project-typo3v4mvc mailing list