yii 中使用排序

使用原理类似于pagination


            $sort = new Sort([
                'attributes' => [
                    'age' => [
                        'asc' => ['age' => SORT_ASC],
                        'desc' => ['age' => SORT_DESC],
                        'default' => SORT_ASC,
                        'label' => '年龄'
                        /*'label' => Inflector::camel2words('age'),*/
                    ],
                    'name'=>[
                        'asc' => ['name' => SORT_ASC],
                        'desc' => ['name' => SORT_DESC],
                        'default' => SORT_ASC,
                        'label' => '姓名'
                    ],
                ],
                //默认按id排序,现在改成按name排序
                /*'defaultOrder' => ['name' => SORT_ASC],*/
            ]);
                //创建name和age排序链接, 类似LinkPager::widget(['pagination' => $pages]);
                //生成姓名
            $data['name'] = $sort->link('name');
            $data['age'] = $sort->link('age');

            $data['person']  = Person::find() -> andWhere(['deleted' => '-1']);;
            //分页
            $data['pagination'] = new Pagination([
                'defaultPageSize' => 4,
          //count()是Query类中的方法
                'totalCount' => $data['person']->count(),
            ]);

            //***$data['person']必须是一个Query对象,才可以调用orderBy(),offset(),limit()等方法
            //$sort生成数组['field_name' => ORDER_DESC]填充orderby方法
            $data['person'] = $data['person']->orderBy($sort->orders)
                ->offset($data['pagination']->offset)
                ->limit($data['pagination']->limit)
                ->all();

            return $this->render("show", $data);

你可能感兴趣的:(yii)