Mit Sonata Admin Bundle, das ein großartiges Add-On für Symfony ist, habe ich das Problem wie folgt beschrieben.Listenansicht in Sonata Admin nach verwandten Entity-Feldern sortieren
Sagen wir, wir haben 3 Entitäten: Stadt, Staat und Land. Sie alle haben die Eigenschaften id
und name
. Die Stadt steht in einem Verhältnis von Staat zu Staat, und der Staat hat ein Verhältnis von Land zu Land. Sie müssen alle Methoden angeben, die den Wert des Eigenschaftsnamens anzeigen.
Wir können eine Listenansicht für die Einheit der Stadt in Sonata Admin wie folgt erstellen:
geschützte Funktion configureListFields (ListMapper $ listMapper) { $ listMapper -> addIdentifier ('id') -> hinzufügen ('name') -> hinzufügen ('state') -> hinzufügen ('state.country') ;
|-----||--------------------||--------------------||--------------------|
| 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 |
|-----||--------------------||--------------------||--------------------|
Per Default ist die Liste durch die Spalten Id und Namen, das Zeichen^sollte zeigen, dass sortierbar: }
Zur Veranschaulichung der Ansicht wie folgt aussehen könnte. Ich möchte in der Lage sein, die Liste nach den verwandten Entitätsfeldern zu sortieren und einen Link zu haben, der auf die show-Aktion für die verbundene Entität zeigt.
Hier ist, wie ich die Sortierung von Staat erreicht haben:
//...
->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
))
//...
Nun ist die Listenansicht ist sortierbar von der Unterkunft Name des Unternehmens Staat und alle Felder in der Spalte Staat Punkt auf der Show-Seite für den aktuellen Zustand:
|-----||--------------------||--------------------||--------------------|
| 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 kann ich sortieren Sie die Listenansicht nach dem Land (Stadt-> Bundesland-> Land)? Etwas wie folgt aus:
|-----||--------------------||--------------------||--------------------|
| 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 versuche, so etwas wie die oben genannten Code-Schnipsel:
//...
->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 ein Ausnahmefehler ausgelöst. Ich habe verschiedene Kombinationen ausprobiert, aber alles ohne Erfolg.
ich tun konnte:
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('id')
->add('name')
->add('state.name')
->add('state.country.name')
;
}
und das Sortier Problem gelöst, aber dann gibt es keine Links zu den Einheiten.
Die offizielle Dokumentation ist sehr gut, aber dieses Thema fehlt. Also, wie sortiere ich eine Listenansicht nach hierarchischen Entitäten?
HI! Wären Sie bereit, dies als Kochbuchartikel in den Sonata-Dokumenten beizutragen? – greg0ire
Das wäre wirklich nett! – OskarStark
Vielen Dank für das Angebot. Es wird mir eine Ehre sein, das zu tun. – cezar