KnpLabs / KnpLabs/KnpPaginatorBundle

OrderByWalker.php on line 57 - there is no $meta['metadata']

Open
#535 2 comments 0 reactions 0 assignees View on GitHub
Help user
Dominant language
PHP
Stars
1.8k
Forks
332
Avg merge
1d 1h
Merged PRs (30d)
3

Description

Hi!

I got that error when sorting the table:

>request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\FatalErrorException: "Error: Call to a member function hasField() on null" at /vendor/knplabs/knp-components/src/Knp/Component/Pager/Event/Subscriber/Sortable/Doctrine/ORM/Query/OrderByWalker.php line 57 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalErrorException(code: 0): Error: Call to a member function hasField() on null at /vendor/knplabs/knp-components/src/Knp/Component/Pager/Event/Subscriber/Sortable/Doctrine/ORM/Query/OrderByWalker.php:57)"} []

The first page shows as expected, click on page index works too, but the problem comes when ordering by any criteria (sector.id/sector.name/sector.client.name). Debugging I realize that $meta['metadata'] is not set, and therefore hasField($field) crashes.

Controller:
```php
public function indexAction() {
$em = $this->getDoctrine()->getManager();

$dql = "SELECT s as sector, COUNT(e.station) AS count_stations
FROM SectorsBundle:Sector s
LEFT JOIN s.stations e
GROUP BY e.sector";

$query = $em->createQuery($dql);

$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$query, $this->get('request')->query->getInt('page', 1), $this->container->getParameter('num_elements')
);

return $this->render('SectorsBundle:Backend:indexSector.html.twig', array(
'pagination' => $pagination,
));
}
```

Frontend twig file:
```twig

{% for entity in pagination %}

{% endfor %}



{{ knp_pagination_sortable(pagination, ('sector.id' | trans), 'sector.id')|raw }}
{{ knp_pagination_sortable(pagination, ('sector.nom' | trans), 'sector.name')|raw }}
{{ knp_pagination_sortable(pagination, ('sector.client' | trans), 'sector.client.name')|raw }}
{{'sector.estacions' | trans}}
 



{{ entity.sector.id }}
a href="{{ path('backend_sector_edit', { 'id': entity.sector.id }) }}">{{ entity.sector.name }}
a href="{{ path('backend_sector_edit', { 'id': entity.sector.id }) }}">{{ entity.sector.client.nom }}
a href="{{ path('backend_station_by_sector', { 'id': entity.sector.id }) }}">{{'sector.see.stations'| trans({'%count%': entity.count_stations})}}










```

Parameters:
```yaml
knp_paginator.template.pagination: BackendBundle:Pagination:sliding.html.twig
knp_paginator.template.sortable: BackendBundle:Pagination:sortable_link.html.twig
knp_paginator.default_options.page_name: page
knp_paginator.default_options.sort_field_name: sort
knp_paginator.default_options.sort_direction_name: direction
knp_paginator.default_options.distinct: true
knp_paginator.default_options.filter_field_name: filterField
knp_paginator.default_options.filter_value_name: filterValue
```
Any suggestion/hint about whats wrong?

Thank you!

Contributor guide

Open the contributing guide

Research direction

Start at vendor/knplabs/knp-components/src/Knp/Component/Pager/Event/Subscriber/Sortable/Doctrine/ORM/Query/OrderByWalker.php line 57, then reproduce the failure by using the sorting links in the shown controller and Twig template. Trace why the aggregate query leaves metadata unset, and confirm the expected behavior for sorting sector.id, sector.name, and sector.client.name.

Written by the indexing model from the issue text.

Assessment

Tech stack
php, symfony
Domain
backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.