Skip to content

Instantly share code, notes, and snippets.

@Tharos
Created November 16, 2014 12:44
Show Gist options
  • Save Tharos/8680094dddc708f65c27 to your computer and use it in GitHub Desktop.
Save Tharos/8680094dddc708f65c27 to your computer and use it in GitHub Desktop.
Query Objects with Lean Mapper (snippet)
<?php
/**
* Vykreslení přehledu produktů v e-shopu
*
* @var Filter $filter Filtr, který omezuje množinu produktů podle nastavení uživatele
* @var int|null $limit Počet produktů zobrazených na stránce
* @var VisualPaginatorHelper $visualPaginatorHelper Jednoduchý helper, který pomáhá inicialzovat Paginator (Nette)
* @var VisualPaginator $visualPaginator VisualPaginator (Nette)
* @var Template $template Šablona view
* @var string $ord Způsob řazení produktů
*
* Query objekty
*
* ProductsForSaleQuery Vybírá pouze aktivní produkty
* ProductsByFilterQuery Vybírá pouze produkty, které vyhovují danému filtru
* ProductsOrdererQuery Řadí produkty požadovaným způsobem
* SubsetQuery Přidává do dotazu LIMIT a OFFSET, vybírá tak pouze podmnožinu (subset) výsledku
*/
$offset = null;
$productsForSale = new ProductsForSaleQuery;
$productByFilterQuery = new ProductsByFilterQuery($filter);
if ($limit !== null) {
$itemsCount = $productRepository->getCountBy($productsForSale, $productByFilterQuery);
$offset = $visualPaginatorHelper->apply($visualPaginator, $limit, $itemsCount);
}
$template->products = $productRepository->findBy(
$productsForSale,
$productByFilterQuery,
new ProductsOrdererQuery($ord),
new SubsetQuery($limit, $offset)
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment