Blame view

backend/models/Details.php 3.48 KB
33d902b8   Mihail   add converter as ...
1
  <?php
33d902b8   Mihail   add converter as ...
2
3
4
  
  namespace backend\models;
  
d7f6bdbb   Mihail   add Importers fil...
5
  use Yii;
1c9309e1   Mihail   add view for deta...
6
  use backend\components\base\BaseActiveRecord;
33d902b8   Mihail   add converter as ...
7
  
1c9309e1   Mihail   add view for deta...
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  /**
   * This is the model class for table "{{%details}}".
   *
   * @property string $ID
   * @property string $IMPORT_ID
   * @property string $BRAND
   * @property string $ARTICLE
   * @property string $FULL_ARTICLE
   * @property double $PRICE
   * @property string $DESCR
   * @property string $BOX
   * @property string $ADD_BOX
   * @property string $GROUP
   * @property string $timestamp
   */
  class Details extends BaseActiveRecord
  {
d7f6bdbb   Mihail   add Importers fil...
25
26
      const KEY_COLUMN = ['IMPORT_ID','BRAND','ARTICLE'];
      const BATCH = 500;
1c9309e1   Mihail   add view for deta...
27
28
29
30
      /**
       * @inheritdoc
       */
      public static function tableName()
d7f6bdbb   Mihail   add Importers fil...
31
      {
1c9309e1   Mihail   add view for deta...
32
          return '{{%details}}';
d7f6bdbb   Mihail   add Importers fil...
33
34
      }
  
1c9309e1   Mihail   add view for deta...
35
36
37
      /**
       * @inheritdoc
       */
d7f6bdbb   Mihail   add Importers fil...
38
39
40
      public function rules()
      {
          return [
1c9309e1   Mihail   add view for deta...
41
42
43
44
45
46
47
              [[ 'BRAND', 'ARTICLE', 'PRICE', 'DESCR', 'BOX'], 'required'],
            //  [['IMPORT_ID', 'BOX', 'ADD_BOX'], 'integer'],
              [['PRICE'], 'number'],
              [['timestamp'], 'safe'],
              [['BRAND', 'ARTICLE'], 'string', 'max' => 100],
              [['FULL_ARTICLE'], 'string', 'max' => 150],
              [['DESCR', 'GROUP'], 'string', 'max' => 200]
d7f6bdbb   Mihail   add Importers fil...
48
49
50
          ];
      }
  
1c9309e1   Mihail   add view for deta...
51
52
53
54
      /**
       * @inheritdoc
       */
      public function attributeLabels()
d7f6bdbb   Mihail   add Importers fil...
55
      {
1c9309e1   Mihail   add view for deta...
56
57
58
59
60
61
62
63
64
65
66
67
68
          return [
              'ID' => Yii::t('app', 'ID'),
              'IMPORT_ID' => Yii::t('app', 'Import  ID'),
              'BRAND' => Yii::t('app', 'Brand'),
              'ARTICLE' => Yii::t('app', 'Article'),
              'FULL_ARTICLE' => Yii::t('app', 'Full  Article'),
              'PRICE' => Yii::t('app', 'Price'),
              'DESCR' => Yii::t('app', 'Descr'),
              'BOX' => Yii::t('app', 'Box'),
              'ADD_BOX' => Yii::t('app', 'Add  Box'),
              'GROUP' => Yii::t('app', 'Group'),
              'timestamp' => Yii::t('app', 'Timestamp'),
          ];
d7f6bdbb   Mihail   add Importers fil...
69
70
      }
  
1c9309e1   Mihail   add view for deta...
71
      public function ManualInsert ($data)
33d902b8   Mihail   add converter as ...
72
      {
1fa22312   Mihail   add auto upload a...
73
          // \common\components\CustomVarDamp::dumpAndDie($data);
d7f6bdbb   Mihail   add Importers fil...
74
75
76
77
78
79
80
          $table_name = self::tableName();
          $keys_arr = array_keys( $data[0] );
          // найдем те поля которые не являются ключами. Их нужно будет при дубляже апдейтить
          $fields_arr_to_update = array_diff( $keys_arr, $this::KEY_COLUMN );
  
          $query_update = ' on duplicate key update ';
          foreach ($fields_arr_to_update as $field) {
51514d7d   Mihail   add writing data ...
81
              $query_update .= "{$field} = values({$field}),";
d7f6bdbb   Mihail   add Importers fil...
82
83
84
85
86
87
88
89
90
91
92
93
94
95
          }
          // удалим последнюю запятую
          $query_update = substr($query_update, 0, strlen($query_update) - 1);
  
          // запросы будем выполнять пакетами
          // размер пакета установлен в константе
          // разобъем массив на пакеты и будем их проходить
          $data = array_chunk($data, $this::BATCH );
          foreach( $data as $current_batch_array ){
  
              //воспользуемся пакетной вставкой от фреймворка, плюс сразу с экранированием и защитой от инъекций
              $query_insert = Yii::$app->db->createCommand()->batchInsert($table_name, $keys_arr, $current_batch_array)->sql;
              // добавим фрагмент с апдейтом при дубляже
              $query = "{$query_insert} {$query_update}";
1c9309e1   Mihail   add view for deta...
96
              // \common\components\CustomVarDamp::dumpAndDie($query);
d7f6bdbb   Mihail   add Importers fil...
97
98
99
              $res = Yii::$app->db->createCommand($query)->execute();
  
          }
33d902b8   Mihail   add converter as ...
100
101
  
      }
d7f6bdbb   Mihail   add Importers fil...
102
  }