Ordenar la vista de lista en Sonata Admin por campos de entidad relacionados

Utilizando Sonata Admin Bundle, que es un gran complemento para Symfony, me he encontrado con el problema que se describe a continuación.

Digamos que tenemos 3 entidades: ciudad, estado y país. Todos tienen las propiedadesid yname. La ciudad tiene una relación de muchos a uno con el estado y el estado tiene una relación de muchos a uno con el país. Todos tienen que encadenar métodos que muestren el valor del nombre de la propiedad.

Podemos crear una vista de lista para la entidad Ciudad en Sonata Admin de esta manera:

función protegida configureListFields (ListMapper $ listMapper) {$ listMapper -> addIdentifier ('id') -> add ('name') -> add ('state') -> add ('state.country'); }

Por ejemplo, la vista podría verse así:

|-----||--------------------||--------------------||--------------------|
| Id ^|| Name ^             || State              || State Country      |
|-----||--------------------||--------------------||--------------------|    
| 1   || New York           || New York           || USA                |
| 2   || Acapulco           || Guerrero           || Mexico             |
| 3   || Calgary            || Alberta            || Canada             |
| 4   || Tijuana            || Baja California    || Mexico             |
| 5   || Vancouver          || British Columbia   || Canada             |
| 6   || Los Angeles        || California         || USA                |
|-----||--------------------||--------------------||--------------------|

Por defecto, la lista se puede ordenar por columnasCarné de identidad yNombre, el signo ^ debería representar eso. Me gustaría poder ordenar la lista por los campos de entidad relacionados y tener un enlace que apunte a la acción de mostrar para la entidad relacionada.

Así es como he logrado la clasificación porEstado:

//...
->add('state', null, array(
    'route' => array('name' => 'show'),
    'sortable' => true,
    'sort_field_mapping' => array('fieldName' => 'name'), // property name of entity State
    'sort_parent_association_mappings' => array(array('fieldName' => 'state')) // property state of entity City
))
//...

Ahora la vista de lista se puede ordenar por la propiedadnombre de la entidadEstado y todos los campos en la columnaEstado apunte a la página de show para el estado actual:

|-----||--------------------||--------------------||--------------------|
| Id ^|| Name ^             || State ^            || State Country      |
|-----||--------------------||--------------------||--------------------|    
| 3   || Calgary            || Alberta            || Canada             |
| 4   || Tijuana            || Baja California    || Mexico             |
| 5   || Vancouver          || British Columbia   || Canada             |
| 6   || Los Angeles        || California         || USA                |
| 2   || Acapulco           || Guerrero           || Mexico             |
| 1   || New York           || New York           || USA                |
|-----||--------------------||--------------------||--------------------|

¿Cómo ordeno la vista de lista porPaís (Ciudad-> Estado-> País)? Algo como esto:

|-----||--------------------||--------------------||--------------------|
| Id ^|| Name ^             || State ^            || State Country      |
|-----||--------------------||--------------------||--------------------|    
| 3   || Calgary            || Alberta            || Canada             |
| 5   || Vancouver          || British Columbia   || Canada             |
| 2   || Acapulco           || Guerrero           || Mexico             |
| 4   || Tijuana            || Baja California    || Mexico             |
| 6   || Los Angeles        || California         || USA                |
| 1   || New York           || New York           || USA                |
|-----||--------------------||--------------------||--------------------|

Cuando intento algo como el fragmento de código anterior:

//...
->add('state.country', null, array(
    'route' => array('name' => 'show'),
    'sortable' => true,
    'sort_field_mapping' => array('fieldName' => 'country.name'), // property name of entity Country
    'sort_parent_association_mappings' => array(array('fieldName' => 'state.country')) // property country of entity State
))
//...

entonces se produce un error de excepción. Intenté diferentes combinaciones, pero todas sin éxito.

Yo podría hacer:

  protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->addIdentifier('id')
        ->add('name')
        ->add('state.name')
        ->add('state.country.name')
    ;
}

y resolver el problema de clasificación, pero no hay enlaces a las entidades.

La documentación oficial es muy buena, pero le falta este tema. Entonces, ¿cómo ordenar una vista de lista por entidades jerárquicas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta