GridView里面, 有一项是从别的表里面查出来的, 怎么做排序? [ 2.0 版本 ]
[
'attribute'=>'address.address',
'label'=>'地址',
'value'=>'address.address',
'sortLinkOptions'=> (new yii\data\Sort())->link('address.address'),//这里怎么写
],
上面这里address.address前面这个是model名, 后面这个address是属性名
如上, 这里的link改怎么写, 我按上面的写法, 会提示没有“address.address”这个属性。
秀小川 补充于 2017-12-08 10:30
$sort = $dataProvider->getSort();
$sort->attributes['address.address'] = [
'asc'=>['t_address.address' => SORT_ASC],
'desc'=>['t_address.address' => SORT_DESC],
];
$dataProvider->setSort($sort);
按照这种方法修改!
最佳答案
-
给个例子如下:
$dataProvider = new ActiveDataProvider([ 'query' => Report::find()->joinWith(['member']), ]); $dataProvider->setSort([ 'attributes' => [ 'title' => [ 'asc' => ['title' => SORT_ASC], 'desc' => ['title' => SORT_DESC], //'label' => '反馈会员', ], 'create_time' => [ 'asc' => ['create_time' => SORT_ASC], 'desc' => ['create_time' => SORT_DESC], ], 'status' => [ 'asc' => ['status' => SORT_ASC], 'desc' => ['status' => SORT_DESC], ], 'backMember' => [ 'asc' => ['ld_member.username' => SORT_ASC], 'desc' => ['ld_member.username' => SORT_DESC], ], ], ]);
这个backMember是member表的,这里是在Report模型里添加个属性就可以多关联到的字段进行排序了。希望这个例子能够帮助到你
共 3 条回复@菜鸟鼻涕 这种可以达到效果, 但是像默认的title这些生成以后本来就是默认带排序的, 用这种方法,就必须把所有字段重写一遍。
我是按照下面的方法修改了下$sort = $dataProvider->getSort(); $sort->attributes['address.address'] = [ 'asc'=>['t_address.address' => SORT_ASC], 'desc'=>['t_address.address' => SORT_DESC], ]; $dataProvider->setSort($sort);
菜鸟鼻涕 觉得很赞
秀小川
注册时间:2017-08-16
最后登录:2022-05-23
在线时长:20小时47分
最后登录:2022-05-23
在线时长:20小时47分
- 粉丝1
- 金钱455
- 威望0
- 积分655