【问题标题】:Filtering data in CGridView based on relations基于关系过滤CGridView中的数据
【发布时间】:2014-08-01 21:20:32
【问题描述】:

大家好, 我是 yii 的新手,我正在使用 gii 对名为 city 的模型执行 crud 操作,并且我与 state 模型 a city->state_id = state.state_id 有关系。 Crud 一切正常,但在那个视图部分我想根据 state_name 进行过滤

在关系方法中,我有这段代码

'state' => array(self::BELONGS_TO, 'MasState', 'State_Id'),

这里是搜索代码

public function search() {
        // @todo Please modify the following code to remove attributes that should not be searched.

        $criteria = new CDbCriteria;
        $MasState = new MasState;


        $criteria->together = true;
       $criteria->compare('state.State_Name',$MasState->State_Name,true);  
      $criteria->with= array('state');
        $criteria->compare('City_Id', $this->City_Id);
        $criteria->compare('State_Id', $this->State_Id);
        $criteria->compare('City_Name', $this->City_Name, true);
        $criteria->compare('Del_Flag', $this->Del_Flag);
        $criteria->compare('Ts_Modified', $this->Ts_Modified, true);
        $criteria->compare('Ts_Created', $this->Ts_Created, true);

        return new CActiveDataProvider($this, array(
            'criteria' => $criteria,
        ));
    }

和admin.php页面代码

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'mas-city-grid',
    'dataProvider'=>$model->search(),
'filter'=>$model,
    'columns'=>array(
        array(
            'header' => 'SL NO#',
            'class' => 'CounterColumn'
        ),
        array(
          'name' => 'state.State_Name',
          'header' => 'State Name',
          'filter' => CHtml::activeTextField($model,'State_Name'),
          'value' => '$data->state->State_Name',
        ),
        'City_Name',
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

我收到错误“未定义属性“MasCity.State_Name””我知道城市模型没有 state_name 但如何使其工作。请帮帮我

提前致谢

【问题讨论】:

  • 试试 CHtml::activeTextField($model->state,'State_Name')

标签: php yii


【解决方案1】:

首先在你的search 方法中你应该这样做:

public function search() {

    $criteria = new CDbCriteria;
    $criteria->with= array('state');
    $criteria->together = true;


    //Get the relation value from the request
    $criteria->compare('state.State_Name',Yii::app()->request->getParam('state_state_name'),true);  
    $criteria->compare('City_Id', $this->City_Id);
    $criteria->compare('State_Id', $this->State_Id);
    $criteria->compare('City_Name', $this->City_Name, true);
    $criteria->compare('Del_Flag', $this->Del_Flag);
    $criteria->compare('Ts_Modified', $this->Ts_Modified, true);
    $criteria->compare('Ts_Created', $this->Ts_Created, true);

    return new CActiveDataProvider($this, array(
        'criteria' => $criteria,
    ));
}

在你看来:

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'mas-city-grid',
    'dataProvider'=>$model->search(),
'filter'=>$model,
    'columns'=>array(
        array(
            'header' => 'SL NO#',
            'class' => 'CounterColumn'
        ),
        array(
          'name' => 'state.State_Name',
          'header' => 'State Name',
          'filter' => CHtml::textField('state_state_name', Yii::app()->request->getParam('state_state_name')),
          'value' => '$data->state->State_Name',
        ),
        'City_Name',
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

【讨论】:

  • 啊,谢谢,我找到了这个页面。它太有用了!谢谢!
猜你喜欢
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
相关资源
最近更新 更多