yii2 add search widget grid view -
**how can add girdview search relation table column ?
i have girlview search box except relation table (developersactivity.developer_point) , ('developersactivity.project_done') have thier value widget search box not apear above them**
my controller
$searchmodel = new developersearch(); $dataprovider = $searchmodel->search(yii::$app->request->queryparams); return $this->render('dashboard', [ 'dataprovider' => $dataprovider, 'searchmodel' => $searchmodel ]);
my search model
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; } }
the model
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']); } }
and developersactivity model class
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'], ]; } }
here view
'dataprovider' => $dataprovider, 'filtermodel' => $searchmodel, 'columns' => [ 'developer_id', 'name', 'email', 'phone', 'email', 'developersactivity.developer_point', 'developersactivity.project_done' // 'value'=>'developersactivity.point', //'contentoptions'=>['style'=>'width: 120px;'] ], ]); ?>
in model add getter field (assuming field named actvityname)
/* getter deleveloer activity name */ public function getdevelopersactivityname() { return $this->developersactivity->activityname; }
in searchmodel
add public var related field , declare safe in rules
/* calculated attribute */ public $activityname; /* setup rules */ public function rules() { return [ /* other rules */ [['activityname'], 'safe'] ]; }
and in filter can add filter field
// filter developer activity $query->joinwith(['developersactivity' => function ($q) { $q->where('yor_develeoper_activity_table.your_developer_activity_column "%' . $this->activityname. '%"'); }]); return $dataprovider;
in gridview can refer directly using
'columns' => [ ['class' => 'yii\grid\serialcolumn'], 'id', 'fullname', 'activityname', ['class' => 'yii\grid\actioncolumn'], ]
you can take ad tutorial suggestions http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/
Comments
Post a Comment