Filtreowanie i sortowanie w gridView

Cześć. Zrobiłem sobie CRUD i w indexie wyświetlam dane wraz z obrazkiem.


<?=

    GridView::widget([

        'dataProvider' => $dataProvider,

        'filterModel' => $searchModel,

        'columns' => [

            //  ['class' => 'yii\grid\SerialColumn'],

            //  'Id',

            'Name',

            'Label',

            [

                'attribute' => 'Rel_Category',

                'value' => function($data) {

                    if (isset($data->Rel_Category)) {

                        return $data->relCategory->Name;

                    }return "Nie wybrano";

                },

            ],

            [

                'attribute' => 'Picture',

                'format' => ['html'],

                'value' => function ($data) {

            if (!empty($data['Picture'])) {

                return Html::img(Yii::getAlias($data['Picture']), ['width' => '70px']);

            }

            return "Nie wybrano";

        },

            ],

            ['class' => 'yii\grid\ActionColumn'],

        ],

    ]);

    ?>

Ale chciałem zapytać co można zrobić, aby dane wyświetlić według odpowiedniego wzoru. A mianowicie mam tutaj tabelę "Kategorie".

W tej tabeli Rel_Category to to samo co Id. I tak np. test o id=54 jest kategorią, która ma sobie podkategorie: test2 i kategoria(id=51 i 53). W indexie tak chciałbym wyświetlić te dane, aby poniżej kategorii znajdowały się podkategorie, czyli pod test wyświetlały się kategoria i test2. Mam nadzieję, że wyjaśniełem to w miare zrozumiale. Nie wiem od czego zacząć pewnie trzeba napisać coś w $DataProvider? Ktoś pomoże?