Listenansicht in Sonata Admin nach verwandten Entitätsfeldern sortieren

Mit dem Sonata Admin Bundle, einem großartigen Add-On für Symfony, bin ich auf das folgende Problem gestoßen.

Nehmen wir an, wir haben 3 Entitäten: Stadt, Bundesland und Land. Sie haben alle die Eigenschaftenid undname. Stadt hat eine 1: 1-Beziehung zum Staat und Staat hat eine 1: 1-Beziehung zum Land. Sie müssen alle String-Methoden verwenden, um den Wert des Eigenschaftsnamens anzuzeigen.

Wir können eine Listenansicht für die Entität City in Sonata Admin wie folgt erstellen:

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

Zur Veranschaulichung könnte die Ansicht folgendermaßen aussehen:

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

Standardmäßig ist die Liste nach den Spalten @ sortierbaIch würd undNam, das Zeichen ^ sollte das zeigen. Ich möchte die Liste nach den zugehörigen Entitätsfeldern sortieren und einen Link haben, der auf die Anzeigeaktion für die zugehörige Entität verweist.

Hier ist, wie ich die Sortierung nach @ erreicht haZustan:

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

Jetzt kann die Listenansicht nach der Eigenschaft @ sortiert werdNam der EntitätZustan und alle Felder in der SpalteZustan Zeigen Sie auf die Show-Seite für den aktuellen Status:

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

Wie sortiere ich die Listenansicht nach demLan (Stadt-> Bundesland-> Land)? Etwas wie das

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

Wenn ich so etwas wie das obige Code-Snippet versuche:

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

dann wird ein Ausnahmefehler ausgelöst. Ich habe verschiedene Kombinationen ausprobiert, aber alle ohne Erfolg.

Ich könnte

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

und lösen das Problem mit der Sortierung, aber dann gibt es keine Links zu den Entitäten.

Die offizielle Dokumentation ist sehr gut, aber dieses Thema fehlt. So sortieren Sie eine Listenansicht nach hierarchischen Entitäten:

Antworten auf die Frage(2)

Ihre Antwort auf die Frage