Classifique a exibição de lista no Sonata Admin por campos de entidade relacionados

Usando o Sonata Admin Bundle, que é um ótimo complemento para o Symfony, deparei-me com o problema descrito a seguir.

Digamos que temos três entidades: Cidade, Estado e País. Todos eles têm as propriedadesid ename. Cidade tem uma relação muitos-para-um com o Estado e Estado tem uma relação muitos-para-um com o País. Todos eles precisam codificar métodos que exibem o valor do nome da propriedade.

Podemos criar uma exibição de lista para a entidade City no Sonata Admin da seguinte maneira:

função protegida configureListFields (ListMapper $ listMapper) {$ listMapper -> addIdentifier ('id') -> add ('name') -> add ('state') -> add ('state') -> add ('state.country'); }

Para ilustração, a visualização pode ser assim:

|-----||--------------------||--------------------||--------------------|
| 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 padrão, a lista é classificável pelas colunasEu iria eNome, o sinal ^ deve representar isso. Eu gostaria de poder classificar a lista pelos campos da entidade relacionada e ter um link apontando para a ação show da entidade relacionada.

Aqui está como eu consegui a classificação 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
))
//...

Agora a exibição em lista é classificável pela propriedadenome da entidadeEstado e todos os campos na colunaEstado aponte para a página do programa para o estado atual:

|-----||--------------------||--------------------||--------------------|
| 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                |
|-----||--------------------||--------------------||--------------------|

Como faço para classificar a exibição de lista peloPaís (Cidade-> Estado-> País)? Algo assim:

|-----||--------------------||--------------------||--------------------|
| 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                |
|-----||--------------------||--------------------||--------------------|

Quando tento algo parecido com o trecho de código acima:

//...
->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
))
//...

um erro de exceção é lançado. Eu tentei combinações diferentes, mas todas sem sucesso.

Eu poderia fazer:

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

e resolva o problema de classificação, mas não há links para as entidades.

A documentação oficial é muito boa, mas falta esse tópico. Então, como classificar uma exibição de lista por entidades hierárquicas?

questionAnswers(1)

yourAnswerToTheQuestion