【问题标题】:yii2 add search widget grid viewyii2 添加搜索小部件网格视图
【发布时间】:2017-08-20 17:47:39
【问题描述】:

**如何将 girdView 搜索添加到我的关系表列?

除了我的关系表外,我有所有 girlview 搜索框 (developersActivity.developer_point) 和 ('developersActivity.project_done') 我有他们的价值,但小部件搜索框没有出现在它们上方**

我的控制器

   $searchModel = new DeveloperSearch();

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

        return $this->render('dashboard', [
            'dataProvider' => $dataProvider,
            'searchModel' => $searchModel
        ]);

我的搜索模型

class DeveloperSearch extends Developers
{
    public function rules()
    {
        return parent::rules();
    }

    public function scenarios()
    {
        return Model::scenarios();
    }

    public function search($param)
    {

        $query = Developers::find();

        $dataProvider = new ActiveDataProvider([
            'query' => $query
        ]);

        $this->load($param);

        $query->joinWith('developersActivity');

        $dataProvider->setSort([
            'attributes'=> [
                'name',
                'developersActivity.developer_point'=>[
                    'asc'=>['developer_point'=>SORT_ASC],
                    'desc'=>['developer_point'=>SORT_DESC],
                ]
            ]
        ]);

        $query->andFilterWhere([
            'developer_id' => $this->developer_id,
        ]);

        $query->andFilterWhere(['like', 'name', $this->name])
            ->andFilterWhere(['like', 'phone', $this->phone])
            ->andFilterWhere(['like', 'email', $this->email]);

        return $dataProvider;
    }
}

模型

class Developers extends ActiveRecord
{

    public static function tableName()
    {
        return 'developers';
    }



    public function rules()
    {
        return [
            [['name',
                'family',
                'phone',
                'email',
                'address',
                'brithday',
                'age',
                'ability',
                'role',

                'join_date',
                ], 'required'],
            [['developer_id'], 'integer'],
            ['email','email'],
            [['phone'],'integer', 'min' => 10],
            [['address'], 'string', 'max' => 100],
            [['name'], 'string', 'min' => 3],

        ];
    }



    public  function getDevelopersActivity(){
        return $this->hasOne(DevelopersActivity::className(),['developer_activity_id' => 'developer_id']);
    }

}

和developersActivity模型类

class DevelopersActivity extends ActiveRecord
{
    public function rules()
    {
        return [
            [['developer_activity_id',
                'developer_point',
                'project_done',
                'free_rate',
                'address',
                'estimate_for_next_project',
                'date_project_done',
                'number_of_project',
                'activity_rate',
            ], 'safe'],

        ];

    }

}

这里是视图

    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,

    'columns' => [
        'developer_id',
        'name',
        'email',
        'phone',
        'email',
        'developersActivity.developer_point',
        'developersActivity.project_done'


        //  'value'=>'developersActivity.point',
        //'contentOptions'=>['style'=>'width: 120px;']
    ],


]);
?>

【问题讨论】:

    标签: yii2


    【解决方案1】:

    在您的模型中为该字段添加一个 getter(假设该字段名为 actvityname)

    /* Getter for deleveloer activity name   */
     public function getDevelopersActivityName() {
       return $this->developersActivity->activityname;
     }
    

    在你的 searchModel 中

    为您的相关字段添加一个公共变量并在规则中声明为安全

      /* your calculated attribute */
      public $activityName;
    
      /* setup rules */
      public function rules() {
         return [
          /* your other rules */
          [['activityName'], 'safe']
         ];
      }
    

    在过滤器中,您可以为您的字段添加过滤器

        // filter by developer activity
        $query->joinWith(['developersActivity' => function ($q) {
            $q->where('yor_develeoper_activity_table.your_developer_activity_column LIKE "%' . $this->activityName. '%"');
        }]);
    
        return $dataProvider;
    

    在gridview中你可以直接使用

      'columns' => [
        ['class' => 'yii\grid\SerialColumn'],
        'id',
        'fullName',
        'activityName',
        ['class' => 'yii\grid\ActionColumn'],
    ]
    

    您可以查看本教程的广告以获取一些建议http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多