Sorting 在gridview中按相关字段进行过滤和排序(2度)

Sorting 在gridview中按相关字段进行过滤和排序(2度),sorting,gridview,filter,yii2,Sorting,Gridview,Filter,Yii2,我的型号订单具有以下功能: public function getAccount() { return $this->hasOne(Account::className(), ['id' => 'account_id']); } public function getChairName() { return $this->account->chairName; } 问题在于,chairName本身

我的型号
订单
具有以下功能:

public function getAccount()
    {
        return $this->hasOne(Account::className(), ['id' => 'account_id']);
    }

    public function getChairName()
    {
        return $this->account->chairName;
    }
问题在于,chairName本身是一个相关字段(在另一个模型
帐户中创建):

在我的
OrderSearch
模型中,我现在尝试按
主席的名字进行搜索和筛选。在
Account
中,椅子存储有一个
id
,该id链接到模型
类别

我一直在查看此链接,但它没有帮助我解决问题:

我的
OrderSearch
模型如下所示:

<?php

namespace app\models;

use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use app\models\OrderHistory;

[...]

class OrderHistorySearch extends OrderHistory
{
    [...]
    public $chairName;
    [...]
    public function rules()
    {
        return [
            [...]
            [['chairName'], 'safe'],
            [...]
        ];
    }
    [...]

    public function scenarios() { [...] }

    public function search($params)
    {
        $query = OrderHistory::find();

        $query->joinWith(['employee', 'account', 'item']);

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

        [...]

        $dataProvider->sort->attributes['chairName'] = [
            'asc' => ['account.chair' => SORT_ASC],
            'desc' => ['account.chair' => SORT_DESC],
        ];

        [...]

        $this->load($params);

        if (!$this->validate()) { [...] }

        $query->andFilterWhere([ [...] ]);

        $query->andFilterWhere(['like', 'category.name', $this->chairName]);

        return $dataProvider;
    }
}

<?php

namespace app\models;

use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use app\models\OrderHistory;

[...]

class OrderHistorySearch extends OrderHistory
{
    [...]
    public $chairName;
    [...]
    public function rules()
    {
        return [
            [...]
            [['chairName'], 'safe'],
            [...]
        ];
    }
    [...]

    public function scenarios() { [...] }

    public function search($params)
    {
        $query = OrderHistory::find();

        $query->joinWith(['employee', 'account', 'item']);

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

        [...]

        $dataProvider->sort->attributes['chairName'] = [
            'asc' => ['account.chair' => SORT_ASC],
            'desc' => ['account.chair' => SORT_DESC],
        ];

        [...]

        $this->load($params);

        if (!$this->validate()) { [...] }

        $query->andFilterWhere([ [...] ]);

        $query->andFilterWhere(['like', 'category.name', $this->chairName]);

        return $dataProvider;
    }
}