Как настроить фильтр и сортировку по связанным таблицам?
Как сделать фильтрацию и сортировку по связанным данным довольно подробно описано в документации
что касается конкретно Вашей ошибки - то тут ничего удивительного у Вас есть свойство $balance и реляция с таким же именем, которая так же доступна как свойство. В результате у Вас получается два свойства с одним именем - одно объявленное Вами, второе  - "магическое" на основе реляции.
Выход: или переименуйте реляцию или свое свойство
Доброе утро.
Покажите, именно, как Вы фильтруете в поисковой модели.
Если настроить нужно по разным моделям фильтрацию, то Вам надо ещё создать псевдонимы таблиц.
Покажу на своём примере.
Мне требовалось в маршрутах сделать поиск по городам.
В модели "маршруты" создал публичное свойство "$city_id;". Так же есть связующая таблица, где маршруты связаны с городами. В самом запросе добавил связь и joinWith().$query = Routes::find()
            ->from(['r' => Routes::tableName()])
            ->with(['city', 'routesCities', 'price'])
            ->joinWith([
                'city' => function(ActiveQuery $query){
                    $query->from(['rc1' => Cities::tableName()]);
                }
            ])
            ->joinWith([
                'routesCities' => function(ActiveQuery $query){
                    $query->from(['rc2' => RoutesCities::tableName()]);
                }
            ])
В этом запросе я делаю псевдоним для таблицы маршрутов, для таблицы city и связующей таблицы.
Соответственно получаю три псевдонима "r" - маршруты, "rc1" - города, "rc2" - связующая таблица, хранится привязка города к маршруту.
И тогда в фильтрации пишу следующее:$query->andFilterWhere([
            'r.id' => $this->id,
            /*****/
            'rc1.id' => $this->city_id, // фильтрую по id города.
        ]);
И в GridView делаю саму колонку фильтра, вывожу через запятую города, через которые проходит маршрут.[
                'attribute' => 'city_id',
                'label' => "Города",
                'filter' => Cities::find()->select(['title', 'id'])->indexBy('id')->orderBy(['title' => SORT_ASC])->column(),
                'value' => function(Routes $routes){
                     return implode(',', ArrayHelper::map($routes->city, 'id', 'title'));
                }
            ],