Webspire

Administrační systém

nw7 v1.36.0

V nové verzi inspire/nw7 balíčku přibyla možnost do DbMapperů nasetovat službu, která bude je zodpovědná za sestavení WHERE a ORDER BY SQL dotazů.

Motivace

Typicky v případě několika podobných modulů nastává situace, kdy do managerů těchto modulů (např. do všech potomků Article modulu) potřebujete dodat logiku, která zajistí sestavení nějaké složitější WHERE nebo ORDER BY SQL klauzule (tzn. manuální podmínky/řazení).

Doposu se musel tedy přepsat příslušný manager, nainjectovat mu vlastního potomka DbMapperu a v rámci něj naimplementovat příslušnou buildCondition* resp. buildOrderBy* podmínku.

Nově je možné pouze využít konfiguraci v configu (kde zadefinujeme jaký ManualQueryBuilder se má nastavit mapperu jakého managera) a ManualQueryBuilderInjector se nám postará o nasetování příslušného builderu do DbMapperu daného managera. Není tak potřeba přepisovat ani managera, ani DbMapper.

Příklad


parameters:
    mapper:
        manualQueryBuilder: # definice queryBuilderu
            articleManager: articleQueryBuilder
            blogManager: @articleQueryBuilderFactory::create('blog')

services:
    articleQueryBuilder:
        class: Inspire\NW7\Module\Article\Service\ArticleQueryBuilder

 

Jak je vidět, query builderu lze zadefinovat jako název služby (pak se služba nevytváří, dokud není skutečně potřeba onen manager), nebo jako volání jiné služby.

ArticleManager, resp. jeho DbMapper tedy dostane nainjectován ArticleQueryBuilder.

ManualQueryBuilder se typicky hodí v případech, kdy v několika mapperech potřebuji mít podobnou podmínku, lišící se např. pouze základní tabulkou - přes továrnu si nechám sestavit správně nakonfigurovaný QueryBuilder a ten dodám do příslušných mapperů.

###message