Menu.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace common\modules\rbac\models\searchs;
  3. use common\modules\rbac\models\Menu as MenuModel;
  4. use yii\base\Model;
  5. use yii\data\ActiveDataProvider;
  6. /**
  7. * Menu represents the model behind the search form about [[\rbac\models\Menu]].
  8. *
  9. * @author Misbahul D Munir <misbahuldmunir@gmail.com>
  10. *
  11. * @since 1.0
  12. */
  13. class Menu extends MenuModel
  14. {
  15. /**
  16. * {@inheritdoc}
  17. */
  18. public function rules()
  19. {
  20. return [
  21. [['id', 'parent', 'order'], 'integer'],
  22. [['name', 'route', 'parent_name'], 'safe'],
  23. ];
  24. }
  25. /**
  26. * {@inheritdoc}
  27. */
  28. public function scenarios()
  29. {
  30. // bypass scenarios() implementation in the parent class
  31. return Model::scenarios();
  32. }
  33. /**
  34. * Searching menu.
  35. *
  36. * @param array $params
  37. *
  38. * @return \yii\data\ActiveDataProvider
  39. */
  40. public function search($params)
  41. {
  42. $query = MenuModel::find()
  43. ->from(MenuModel::tableName().' t')
  44. ->joinWith(['menuParent' => function ($q) {
  45. $q->from(MenuModel::tableName().' parent');
  46. }]);
  47. $dataProvider = new ActiveDataProvider([
  48. 'query' => $query,
  49. ]);
  50. $sort = $dataProvider->getSort();
  51. $sort->attributes['menuParent.name'] = [
  52. 'asc' => ['parent.name' => SORT_ASC],
  53. 'desc' => ['parent.name' => SORT_DESC],
  54. 'label' => 'parent',
  55. ];
  56. $sort->attributes['order'] = [
  57. 'asc' => ['parent.order' => SORT_ASC, 't.order' => SORT_ASC],
  58. 'desc' => ['parent.order' => SORT_DESC, 't.order' => SORT_DESC],
  59. 'label' => 'order',
  60. ];
  61. $sort->defaultOrder = ['menuParent.name' => SORT_ASC];
  62. if (!($this->load($params) && $this->validate())) {
  63. return $dataProvider;
  64. }
  65. $query->andFilterWhere([
  66. 't.id' => $this->id,
  67. 't.parent' => $this->parent,
  68. ]);
  69. $query->andFilterWhere(['like', 'lower(t.name)', strtolower($this->name)])
  70. ->andFilterWhere(['like', 't.route', $this->route])
  71. ->andFilterWhere(['like', 'lower(parent.name)', strtolower($this->parent_name)]);
  72. return $dataProvider;
  73. }
  74. }