Blame view

common/modules/product/models/ProductSearch.php 3.38 KB
a8370482   Alexander Karnovsky   init project
1
2
3
4
5
6
7
8
  <?php
  
  namespace common\modules\product\models;
  
  use Yii;
  use yii\base\Model;
  use yii\data\ActiveDataProvider;
  use common\modules\product\models\Product;
5aa7418e   Karnovsky A   Base-product#3 fu...
9
  use yii\web\NotFoundHttpException;
a8370482   Alexander Karnovsky   init project
10
11
12
13
14
15
  
  /**
   * ProductSearch represents the model behind the search form about `common\modules\product\models\Product`.
   */
  class ProductSearch extends Product
  {
550f051a   Karnovsky A   Karnovsky-0505201...
16
17
18
      public $brand_name;
      public $category_name;
  
a8370482   Alexander Karnovsky   init project
19
20
21
22
23
24
      /**
       * @inheritdoc
       */
      public function rules()
      {
          return [
550f051a   Karnovsky A   Karnovsky-0505201...
25
              [['name', 'brand_name', 'category_name'], 'safe'],
a8370482   Alexander Karnovsky   init project
26
              [['tax_brand_id', 'product_id'], 'integer'],
550f051a   Karnovsky A   Karnovsky-0505201...
27
              [['is_top', 'is_new'], 'boolean'],
a8370482   Alexander Karnovsky   init project
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
          ];
      }
  
      /**
       * @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 = Product::find();
  
e136edc8   Karnovsky A   ---
51
52
53
54
          $query->joinWith(['brand', 'brand.brandNames', 'categories', 'categories.categoryNames', 'variant']);
  
          $query->groupBy(['product.product_id']);
          $query->orderBy('product.product_id', 'DESC');
a8370482   Alexander Karnovsky   init project
55
56
57
58
59
  
          $dataProvider = new ActiveDataProvider([
              'query' => $query,
          ]);
  
e136edc8   Karnovsky A   ---
60
          if ( !($this->load($params) && $this->validate()) ) {
a8370482   Alexander Karnovsky   init project
61
62
63
              return $dataProvider;
          }
  
550f051a   Karnovsky A   Karnovsky-0505201...
64
65
66
          $dataProvider->setSort([
              'attributes' => [
                  'name',
e136edc8   Karnovsky A   ---
67
68
69
70
71
72
73
74
                  'brand_name' => [
                      'asc' => ['brand_name.value' => SORT_ASC],
                      'desc' => ['brand_name.value' => SORT_DESC],
                      'default' => SORT_DESC,
                      'label' => 'Brand name',
                  ],
                  'category_name',
                  'variant_sku',
550f051a   Karnovsky A   Karnovsky-0505201...
75
76
77
              ]
          ]);
  
e136edc8   Karnovsky A   ---
78
79
80
81
82
83
84
85
86
87
          if (isset($this->is_top)) {
              $query->andFilterWhere([
                  'is_top' => (bool)$this->is_top,
              ]);
          }
          if (isset($this->is_new)) {
              $query->andFilterWhere([
                  'is_new' => (bool)$this->is_new,
              ]);
          }
550f051a   Karnovsky A   Karnovsky-0505201...
88
  
a8370482   Alexander Karnovsky   init project
89
          $query->andFilterWhere([
e136edc8   Karnovsky A   ---
90
91
92
              'product.brand_id' => $this->brand_id,
              'product.product_id' => $this->product_id,
              'product_category.category_id' => $this->category_id
a8370482   Alexander Karnovsky   init project
93
94
          ]);
  
e136edc8   Karnovsky A   ---
95
          $query->andFilterWhere(['ilike', 'product.name', $this->name]);
550f051a   Karnovsky A   Karnovsky-0505201...
96
97
          $query->andFilterWhere(['ilike', 'brand_name.value', $this->brand_name]);
          $query->andFilterWhere(['ilike', 'category_name.value', $this->category_name]);
e136edc8   Karnovsky A   ---
98
          $query->andFilterWhere(['ilike', 'product_variant.sku', $this->variant_sku]);
a8370482   Alexander Karnovsky   init project
99
100
101
  
          return $dataProvider;
      }
b519af22   Karnovsky A   Base-product func...
102
103
104
  
      public static function findByAlias($alias) {
          /** @var ProductQuery $query */
5aa7418e   Karnovsky A   Base-product#3 fu...
105
          $query = Product::find();
b519af22   Karnovsky A   Base-product func...
106
107
108
109
110
111
112
113
          $query->byAlias($alias);
          if (($model = $query->one()) !== null) {
              return $model;
          } else {
              throw new NotFoundHttpException('The requested product does not exist.');
          }
      }
  
ad9b9ca9   Karnovsky A   Karnovsky-2904201...
114
115
116
117
118
119
120
121
122
      public static function findByRemoteID($id) {
          /** @var CategoryQuery $query */
          $query = Product::find()
              ->andFilterWhere(['remote_id' => $id]);
          if (($model = $query->one()) !== null) {
              return $model;
          }
          return null;
      }
a8370482   Alexander Karnovsky   init project
123
  }