Merge branch 'improve_crud_202006'

This commit is contained in:
Julien Fastré 2020-06-18 15:28:38 +02:00
commit 83bbb31cc8
3 changed files with 38 additions and 14 deletions

View File

@ -126,8 +126,16 @@ Version 1.5.18
- [webpack] add namespace for import sass ;
- [activity] move activity.scss to own bundle ;
Master branch
=============
Version 1.5.19
==============
- [address] add a "homeless" characteristic to addresses ;
Version 1.5.20
==============
- [CRUD] make index query more abstract.
Improve build and count query in default index action to be customized
in one dedicated method.

View File

@ -276,6 +276,26 @@ class CRUDController extends AbstractController
*/
protected function onPostIndexFetchQuery(string $action, Request $request, int $totalItems, PaginatorInterface $paginator, $entities) { }
/**
* Build the base query for listing all entities, normally use in a listing
* page.
*
* This base query does not contains any `WHERE` or `SELECT` clauses. Those
* are added by other methods, like `queryEntities` and `countQueries`.
*
* @param string $action
* @param Request $request
* @return QueryBuilder
*/
protected function buildQueryEntities(string $action, Request $request)
{
return $this->getDoctrine()->getManager()
->createQueryBuilder()
->select('e')
->from($this->getEntityClass(), 'e')
;
}
/**
* Query the entity.
*
@ -292,17 +312,12 @@ class CRUDController extends AbstractController
*/
protected function queryEntities(string $action, Request $request, PaginatorInterface $paginator)
{
$query = $this->getDoctrine()->getManager()
->createQueryBuilder()
->select('e')
->from($this->getEntityClass(), 'e')
$query = $this->buildQueryEntities($action, $request)
->setFirstResult($paginator->getCurrentPage()->getFirstItemNumber())
->setMaxResults($paginator->getItemsPerPage())
;
->setMaxResults($paginator->getItemsPerPage());
$this->orderQuery($action, $query, $request, $paginator);
return $query;
// allow to order queries and return the new query
return $this->orderQuery($action, $query, $request, $paginator);
}
@ -344,8 +359,9 @@ class CRUDController extends AbstractController
*/
protected function countEntities(string $action, Request $request): int
{
return $this->getDoctrine()->getManager()
->createQuery("SELECT COUNT(e) FROM ".$this->getEntityClass()." e")
return $this->buildQueryEntities($action, $request)
->select('COUNT(e)')
->getQuery()
->getSingleScalarResult()
;
}

View File

@ -23,7 +23,7 @@ var chill = function() {
weekdaysShort : ['Zon','Ma','Di','Wo','Do','Vri','Zat']
}
};
var pikaday_options = {
format: 'D-M-YYYY',
yearRange: [parseInt(moment().format('YYYY')) - 100, parseInt(moment().format('YYYY'))],