Blame view

common/modules/product/models/BrandSearch.php 4.03 KB
d8c1a2e0   Yarik   Big commit artbox
1
  <?php

d55d2fe0   Yarik   Multilanguage
2
      

4a7f93fb   Yarik   Another one admin...
3
      namespace common\modules\product\models;

d55d2fe0   Yarik   Multilanguage
4
      

4a7f93fb   Yarik   Another one admin...
5
6
7
      use yii\base\Model;

      use yii\data\ActiveDataProvider;

      use yii\db\ActiveQuery;

36d1807a   Yarik   Big commit.
8
9
      

      /**

4a7f93fb   Yarik   Another one admin...
10
11
       * BrandSearch represents the model behind the search form about

       * `common\modules\product\models\Brand`.

36d1807a   Yarik   Big commit.
12
       */

4a7f93fb   Yarik   Another one admin...
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
      class BrandSearch extends Brand

      {

          

          public $brand_name;

          

          /**

           * @inheritdoc

           */

          public function rules()

          {

              return [

                  [

                      [ 'brand_name' ],

                      'safe',

                  ],

                  [

                      [ 'brand_id' ],

                      'integer',

                  ],

              ];

          }

          

          public function behaviors()

          {

              return [];

          }

          

          /**

           * @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 = Brand::find()

                            ->joinWith('lang');

              

              // 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;

              }*/

              

              $dataProvider->setSort([

                  'attributes' => [

                      'brand_id',

                      'brand_name' => [

                          'asc'  => [ 'brand_lang.name' => SORT_ASC ],

                          'desc' => [ 'brand_lang.name' => SORT_DESC ],

                      ],

                  ],

              ]);

              

              // grid filtering conditions

              $query->andFilterWhere([

                  'brand.brand_id' => $this->brand_id,

d8c1a2e0   Yarik   Big commit artbox
88
              ])

4a7f93fb   Yarik   Another one admin...
89
90
91
92
93
94
95
96
                    ->andFilterWhere([

                        'ilike',

                        'brand_lang.name',

                        $this->brand_name,

                    ]);

              

              return $dataProvider;

          }

36d1807a   Yarik   Big commit.
97
          

4a7f93fb   Yarik   Another one admin...
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
          /**

           * @param null|Category    $category

           * @param array            $params

           * @param null|ActiveQuery $productQuery

           *

           * @return ActiveQuery

           */

          public function getBrands($category = NULL, $params = [], $productQuery = NULL)

          {

              

              $query = Brand::find()

                            ->select([

                                Brand::tableName() . '.*',

                            ])

                            ->innerJoin(Product::tableName(), Product::tableName() . '.brand_id=' . Brand::tableName() . '.brand_id')

                            ->innerJoin(ProductCategory::tableName(), ProductCategory::tableName() . '.product_id=' . Product::tableName() . '.product_id');

              

              $query->innerJoin('product_variant', 'product_variant.product_id = ' . Product::tableName() . '.product_id');

              $query->where([

                  '!=',

                  'product_variant.stock',

                  0,

d8c1a2e0   Yarik   Big commit artbox
120
              ]);

4a7f93fb   Yarik   Another one admin...
121
122
123
124
125
126
127
128
129
              $query->groupBy(Product::tableName() . '.product_id');

              if(!empty( $category )) {

                  $query->andWhere([

                      ProductCategory::tableName() . '.category_id' => $category->category_id,

                  ]);

              }

              $query->groupBy(Brand::tableName() . '.brand_id');

              

              return $query;

d8c1a2e0   Yarik   Big commit artbox
130
          }

d8c1a2e0   Yarik   Big commit artbox
131
      }