UserSearch.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. /**
  3. * Author: lf
  4. * Blog: https://blog.feehi.com
  5. * Email: job@feehi.com
  6. * Created at: 2017-08-13 12:12
  7. */
  8. namespace backend\models\search;
  9. use Yii;
  10. use common\models\User;
  11. use backend\behaviors\TimeSearchBehavior;
  12. use backend\components\search\SearchEvent;
  13. use yii\data\ActiveDataProvider;
  14. class UserSearch extends User implements SearchInterface
  15. {
  16. public function behaviors()
  17. {
  18. return [
  19. TimeSearchBehavior::className()
  20. ];
  21. }
  22. /**
  23. * @inheritdoc
  24. */
  25. public function rules()
  26. {
  27. return [
  28. [['username', 'email', 'created_at', 'updated_at'], 'string'],
  29. ['status', 'integer'],
  30. ];
  31. }
  32. /**
  33. * @param array $params
  34. * @param array $options
  35. * @return \yii\data\ActiveDataProvider
  36. * @throws \yii\base\InvalidConfigException
  37. */
  38. public function search(array $params = [], array $options = [])
  39. {
  40. $query = User::find();
  41. /** @var ActiveDataProvider $dataProvider */
  42. $dataProvider = Yii::createObject([
  43. 'class' => ActiveDataProvider::className(),
  44. 'query' => $query,
  45. 'sort' => [
  46. 'defaultOrder' => [
  47. 'created_at' => SORT_DESC,
  48. 'updated_at' => SORT_DESC,
  49. 'username' => SORT_ASC,
  50. ]
  51. ]
  52. ]);
  53. $this->load($params);
  54. if (! $this->validate()) {
  55. return $dataProvider;
  56. }
  57. $query->andFilterWhere(['like', 'username', $this->username])
  58. ->andFilterWhere(['like', 'email', $this->email])
  59. ->andFilterWhere(['=', 'status', $this->status]);
  60. $this->trigger(SearchEvent::BEFORE_SEARCH, Yii::createObject([ 'class' => SearchEvent::className(), 'query'=>$query]));
  61. return $dataProvider;
  62. }
  63. }