按照不在模型

时间:2018-02-07 16:30:22

标签: sorting gridview yii2

我有Gridview和我通过http请求得到的一个列值。有没有办法按此列对表进行排序?

myTableModel.php

class myTableModel extends \yii\db\ActiveRecord
{
    ...,
    public function getExternalValue() {
        $client = new Client();

        return $client->createRequest()->setMethod('get')
        ->setUrl('http:://...')->setData(['id' => 1])->send()->content;
    }
}

myTableModelSearch.php

class myTableModelSearch extends myTableModel
{
    public function rules()
    {
        return [
            [[...,'externalValue'], 'string'],
            [[..., 'externalValue'], 'safe']
        ];
    }
    public $externalValue;

    public function searchView($params) {
       $query = SomeTable::find();

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

        $dataProvider->setSort(['attributes' => [
            'externalValue' => [
                'asc' => ['externalValue' => SORT_ASC],
                'desc' => ['externalValue' => SORT_DESC]
            ]
        ]]);

        if (!($this->load($params) && $this->validate()))
            return $dataProvider;

        return $dataProvider;
    }
}

view.php

GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ... ,
        [
            'attribute' => 'externalValue',
            'value' => function($item) {
                return $item->externalValue;
            },
        ]
    ],
]);

我还尝试使用$item->getExternalValue()(并且没有设置公共属性)来添加值以进行查看,但它没有区别 - 在尝试排序时我得到数据库异常错误SQLSTATE[42S22]: Column not found: 1054 Unknown column 'externalValue' in 'order clause'。我怎么能欺骗gridview,让它按externalValue列对我的表进行排序?

1 个答案:

答案 0 :(得分:1)

您正在使用yii\data\ActiveDataProvider使用ActiveQuery的实例来查找其数据。

尝试使用yii\data\ArrayDataProvider或扩展yii\data\ActiveDataProvider以允许data的第二个来源。

此外,您必须实现一个可以使用您的属性进行排序的排序函数。

查看更多herehere