/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = User::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); /** * Setup your sorting attributes * Note: This is setup before the $this->load($params) * statement below */ $dataProvider->setSort(['attributes' => ['id', 'userIdLink' => ['asc' => ['user.id' => SORT_ASC], 'desc' => ['user.id' => SORT_DESC], 'label' => 'User'], 'userLink' => ['asc' => ['user.username' => SORT_ASC], 'desc' => ['user.username' => SORT_DESC], 'label' => 'User'], 'profileLink' => ['asc' => ['profile.id' => SORT_ASC], 'desc' => ['profile.id' => SORT_DESC], 'label' => 'Profile'], 'roleName' => ['asc' => ['role.role_name' => SORT_ASC], 'desc' => ['role.role_name' => SORT_DESC], 'label' => 'Role'], 'statusName' => ['asc' => ['status.status_name' => SORT_ASC], 'desc' => ['status.status_name' => SORT_DESC], 'label' => 'Status'], 'userTypeName' => ['asc' => ['user_type.user_type_name' => SORT_ASC], 'desc' => ['user_type.user_type_name' => SORT_DESC], 'label' => 'User Type'], 'created_at' => ['asc' => ['created_at' => SORT_ASC], 'desc' => ['created_at' => SORT_DESC], 'label' => 'Created At'], 'email' => ['asc' => ['email' => SORT_ASC], 'desc' => ['email' => SORT_DESC], 'label' => 'Email']]]); if (!($this->load($params) && $this->validate())) { $query->joinWith(['role'])->joinWith(['status'])->joinWith(['profile'])->joinWith(['userType']); return $dataProvider; } $this->addSearchParameter($query, 'user.id'); $this->addSearchParameter($query, 'username', true); $this->addSearchParameter($query, 'email', true); $this->addSearchParameter($query, 'role_id'); $this->addSearchParameter($query, 'status_id'); $this->addSearchParameter($query, 'user_type_id'); $this->addSearchParameter($query, 'created_at'); $this->addSearchParameter($query, 'updated_at'); // filter by role $query->joinWith(['role' => function ($q) { $q->where('role.role_name LIKE "%' . $this->roleName . '%"'); }])->joinWith(['status' => function ($q) { $q->where('status.status_name LIKE "%' . $this->statusName . '%"'); }])->joinWith(['userType' => function ($q) { $q->where('user_type.user_type_name LIKE "%' . $this->userTypeName . '%"'); }]); return $dataProvider; }