2016-09-15 22:44:20 5395次浏览 4条回答 0 悬赏 10 金钱

控制器和视图的源码在下面,模型源码是GII生成的;

$searchModel = new BodySearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);

GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'columns' => [
        ['class' => 'yii\grid\CheckboxColumn'],
        ['class' => 'yii\grid\SerialColumn'],
        'created_at',
        'col_a',
        'col_b',
        'col_c',......
        'updated_at',
        ['class' => 'yii\grid\ActionColumn'],
    ],
  ]);

按照这样写的方法,gridview会生成一个表格,表格会显示Body里面的所有数据。
而我想要的结果是,只显示Body里面col_d为某个值的所有数据。请问怎么修改

最佳答案

  • jackiegao 发布于 2016-09-16 08:17 举报

    那就修改dataProvider数据,而dataProvider应该是通过searchModel生成的,那么去修改searchModel中的过滤条件

     $query->andFilterWhere([
        $this->col_d => xxx(固定值),
        ...
    
    ]);
    
    
    2 条回复
    回复于 2016-09-16 10:58 回复

    感谢这位同学提醒,我发现在searchmodel里有一个变量负责控制过滤条件,修改之后的代码如下

    public function search($params)
    {
        $query = Body::find();
    
        // add conditions that should always apply here
      
        $dataProvider = new ActiveDataProvider([
            'query' => $query->where(['col_d'=>xxx]),
        ]);
        也就是只要在query后面加一个where条件就行了。
    

    如果搜索条件是一个变量,需要在function search()里面另外传递一个参数,然后将传递进来的参数设置为¥query的条件。

    回复于 2016-09-16 13:25 回复

    变量分为是不是model的属性,如果是属性,可以在andFilterWhere 中指定,如果不是,可以在searchModel中定义一个属性,然后用来接收参数,增加$query条件即可

  • 回答于 2016-09-18 12:01 举报

    如果不想更改dataProvider里边的查询条件,也可以使用匿名函数实现.

    [
     'label'=>'col_d',
      'value'=>function($dataProvider){
          if($dataProvider->col_d = 'xxx'){
             return $dataProvider->col_d;
          }
      }
    ]
    
    2 条回复
    回复于 2016-09-18 22:33 回复

    感谢提醒,我实验了一下,这种方法也行

    回复于 2016-09-19 10:22 回复

    不过这种方法通常用来给GridView添加表中不存在的字段的时候使用的.比如,stu表中有id,name,sex,classid四个字段.但是我想要的表格,最后一列是操作,有查看,删除等操作.这个就得用到匿名函数了.
    我贴个图片你看看就明白了.

  • 回答于 2016-09-19 10:23 举报
  • 回答于 2017-12-15 09:25 举报

    我的searchmodel里的数据集分成三类数据,不同的情况下想得到不同类型的数据,但又想服用search方法,所以就改写了search方法
    `
    public function search($params, $id='%')
    {

    $query = Test::find()
            ->select([。。。。])
            ->where(['id'=$id]);
    

    `
    增加了一个分类的参数进行对结果的过滤

您需要登录后才可以回答。登录 | 立即注册
raijin
总监

raijin 安徽合肥

注册时间:2016-03-13
最后登录:2022-09-28
在线时长:75小时44分
  • 粉丝3
  • 金钱1880
  • 威望0
  • 积分2630

热门问题