0, ], [ [ 'department', 'firstname', 'lastname', 'user', 'middlename', 'link', 'position', 'date_add', 'photo', 'country_id', ], 'safe', ], ]; } /** * @inheritdoc */ public function scenarios() { // bypass scenarios() implementation in the parent class return Model::scenarios(); } /** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Team::find(); // add conditions that should always apply here $dataProvider = new ActiveDataProvider([ 'query' => $query, ]); $this->load($params); if(!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } $query->andWhere([ 'user_id' => \Yii::$app->user->getId() ]); $query->joinWith(Department::tableName()); $dataProvider->setSort([ 'attributes' => [ 'team_id', 'position', 'country_id', 'user' => [ 'asc' => [ 'lastname' => SORT_ASC, 'firstname' => SORT_ASC, 'middlename' => SORT_ASC, ], 'desc' => [ 'lastname' => SORT_DESC, 'firstname' => SORT_DESC, 'middlename' => SORT_DESC, ], ], 'link' => [ 'asc' => [ 'link' => SORT_DESC, ], 'desc' => [ 'link' => SORT_ASC, ], ], 'department' => [ 'asc' => [ Department::tableName() . '.name' => SORT_ASC, ], 'desc' => [ Department::tableName() . '.name' => SORT_DESC, ], ], 'experience_from' => [ 'asc' => [ 'experience_from' => SORT_DESC, ], 'desc' => [ 'experience_from' => SORT_ASC, ], ], ], ]); // grid filtering conditions $query->andFilterWhere([ 'team_id' => $this->team_id, 'department_id' => $this->department_id, 'date_add' => $this->date_add, 'user_add_id' => $this->user_add_id, ]); if(!empty($this->experience_from_to) || !empty($this->experience_from_from)) { $query->andFilterWhere([ 'between', 'experience_from', $this->experience_from_to ? ( date('Y') - $this->experience_from_to ) : ( date('Y') - 100 ), $this->experience_from_from ? ( date('Y') - $this->experience_from_from ) : date('Y'), ]); } if(!empty( $this->link ) || $this->link === '0') { $query->andFilterWhere([ $this->link ? '>' : '=', 'char_length(link)', 0, ]); } $query->andFilterWhere([ 'like', 'firstname', $this->firstname, ]) ->andFilterWhere([ 'like', 'lastname', $this->lastname, ]) ->andFilterWhere([ 'like', 'middlename', $this->middlename, ]) ->andFilterWhere([ 'like', 'position', $this->position, ]) ->andFilterWhere([ 'like', 'photo', $this->photo, ]) ->andFilterWhere([ 'like', 'LOWER(country_id)', mb_strtolower($this->country_id), ]) ->andFilterWhere([ 'or', [ 'like', 'LOWER(lastname)', mb_strtolower($this->user), ], [ 'like', 'LOWER(firstname)', mb_strtolower($this->user), ], [ 'like', 'LOWER(middlename)', mb_strtolower($this->user), ], ]) ->andFilterWhere([ 'like', 'LOWER(department.name)', mb_strtolower($this->department), ]); return $dataProvider; } }