Сортировка списка в Sonata Admin по полям связанных сущностей

Используя Sonata Admin Bundle, который является отличным дополнением для Symfony, я столкнулся с проблемой, описанной ниже.

Допустим, у нас есть 3 объекта: город, штат и страна. Все они имеют свойстваid а такжеname, Город имеет отношение многих к одному с государством, а государство имеет отношение многих к одному со страной. Все они должны иметь строковые методы, отображающие значение имени свойства.

Мы можем создать представление списка для объекта City в Sonata Admin следующим образом:

Защищенная функция }

Для иллюстрации вид может выглядеть так:

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

По умолчанию список сортируется по столбцамЯ бы а такженазваниезнак ^ должен изобразить это. Я хотел бы иметь возможность сортировать список по полям связанных сущностей и иметь ссылку, указывающую на действие show для связанной сущности.

Вот как я добился сортировки погосударственный:

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

Теперь представление списка можно сортировать по свойствуназвание сущностигосударственный и все поля в столбцегосударственный указать на страницу шоу для текущего состояния:

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

Как отсортировать представление списка поСтрана (Город-> Государственно> Страна)? Что-то вроде этого:

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

Когда я пытаюсь что-то вроде приведенного выше фрагмента кода:

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

затем выдается ошибка исключения. Я пробовал разные комбинации, но все безуспешно.

Я мог бы сделать:

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

и решить проблему с сортировкой, но тогда нет ссылок на объекты.

Официальная документация очень хорошая, но эта тема отсутствует. Итак, как отсортировать представление списка по иерархическим объектам?

Ответы на вопрос(1)

Ваш ответ на вопрос