Yii2 Gridview不区分大小写的可排序列

时间:2019-04-25 09:04:34

标签: php yii2

我使用yii2,并且我想以不区分大小写的方式使gridview列“ description”可排序。有我的代码:

$dataProvider = new ArrayDataProvider([
    'allModels' => $query->find(),
    'sort' => [
    'attributes' => ['name','description],
    ],
    'pagination' => [
    'pageSize' => $this->pageSize,
    ],
]);

当我单击列描述进行排序时,它显示如下:

  • 职位名称
  • 医生
  • 老师
  • 医生
  • 老师

如您所见,我想对大小写不区分大小写,我该怎么做呢?有想法吗?

2 个答案:

答案 0 :(得分:0)

我认为,为了以不区分大小写的方式对ArrayDataProvider的行进行排序,您应该扩展ArrayDataProvider本身,因为它在内部使用ArrayHelper :: multisort,如果需要,可以按所需的方式进行排序必须将SORT_STRING | SORT_FLAG_CASE作为第四个参数传递给该方法。默认情况下,其值等于SORT_REGULAR常数。

在这里实现:

<?php

namespace app\dataproviders;

use yii\helpers\ArrayHelper;

/**
 * Class ArrayDataProvider
 */
class ArrayDataProvider extends \yii\data\ArrayDataProvider
{

    /** @inheritdoc */
    protected function sortModels($models, $sort)
    {
        $orders = $sort->getOrders();
        if (!empty($orders)) {
            ArrayHelper::multisort(
                $models,
                array_keys($orders),
                array_values($orders),
                SORT_STRING | SORT_FLAG_CASE
            );
        }

        return $models;
    }
}

在使用扩展类而不是\yii\data\ArrayDataProvider

之后

像这样:

$dataProvider = \app\dataproviders\ArrayDataProvider([
    'allModels' => $query->find(),
    'sort' => [
        'attributes' => ['name','description'],
    ],
    'pagination' => [
    'pageSize' => $this->pageSize,
    ],
]);

答案 1 :(得分:0)

阿克马尔(Akmal)写的那真是太好了!

也许您需要为ArrayDataProvider指定,以便在actionColumn不能正常工作时获取正确的ID!

$dataProvider = \app\dataproviders\ArrayDataProvider([
   'allModels' => $query->find(),
   'key'=> 'id',

如果要在gridview中过滤数据,则可以使用以下解决方案: Yii2 GridView with ArrrayDataProvider search 我也试过了,它有效! (最后一条提示:如果要过滤区分大小写的方式,可以使用stripos代替strpos)。 祝你好运!