Blame view

common/models/MarginsGroups.php 3.82 KB
7bfae493   Administrator   Importers CRUD
1
2
3
4
  <?php
  
  namespace common\models;
  
03bffb3b   Administrator   Importers CRUD
5
  use backend\models\Importers;
7bfae493   Administrator   Importers CRUD
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
  use Yii;
  
  /**
   * This is the model class for table "w_margins_groups".
   *
   * @property integer $id
   * @property integer $importer_id
   * @property integer $margin_id
   * @property string $group
   * @property double $koef
   * @property string $timestamp
   */
  class MarginsGroups extends \yii\db\ActiveRecord
  {
      /**
       * @inheritdoc
       */
      public static function tableName()
      {
          return 'w_margins_groups';
      }
  
      /**
       * @inheritdoc
       */
      public function rules()
      {
          return [
7c1201d1   Mihail   add validator for...
34
35
36
37
38
39
              [['importer_id', 'margin_id', 'koef'], 'required', 'on' => 'default'],
              ['group', 'required', 'on' => ['default','form_upload_validation']],
              [['importer_id', 'margin_id'], 'integer' , 'on' => 'default'],
              [['koef'], 'number' , 'on' => 'default'],
              [['timestamp'], 'safe' , 'on' => 'default'],
              [['group'], 'string', 'max' => 200 , 'on' => 'default'],
7bfae493   Administrator   Importers CRUD
40
41
42
43
44
45
46
47
48
49
          ];
      }
  
      /**
       * @inheritdoc
       */
      public function attributeLabels()
      {
          return [
              'id' => 'ID',
03bffb3b   Administrator   Importers CRUD
50
51
52
53
54
              'importer_id' => 'Поставщик',
              'margin_id' => 'Тип цены',
              'group' => 'ГРУППА',
              'koef' => 'Коэффициент',
              'timestamp' => 'ДАТА',
7bfae493   Administrator   Importers CRUD
55
56
          ];
      }
03bffb3b   Administrator   Importers CRUD
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
  
      public function beforeSave($insert)
      {
          if (parent::beforeSave($insert)) {
              $this->timestamp = date("Y-m-d H:i:s");
              return true;
          } else {
              return false;
          }
      }
  
      public function getImporters()
      {
          return $this->hasOne(Importers::className(), ['id' => 'importer_id']);
      }
  
      public function getMargins()
      {
          return $this->hasOne(Margins::className(), ['id' => 'margin_id']);
      }
42078ac6   Mihail   add manual insert...
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
  
      /**
       * вставка данных с апдейтом прямым запросом SQL
       * @param $data - массив вставляемых данный, вставка будет прозводится пакетами размером указанным в константе BATCH
       * @throws \yii\db\Exception
       */
      //@todo - вынести все ручные инсерты в отдельный класс
      public static function ManualInsertWithUpdate($data, $keys)
      {
          // \common\components\CustomVarDamp::dumpAndDie($data);
          $table_name = self::tableName();
          $keys_arr = array_keys($data[0]);
          // найдем те поля которые не являются ключами. Их нужно будет при дубляже апдейтить
          $fields_arr_to_update = array_diff( $keys_arr, $keys );
  
          $query_update = ' on duplicate key update ';
          foreach ($fields_arr_to_update as $field) {
              $query_update .= "[[{$field}]] = values([[{$field}]]),";
          }
          // удалим последнюю запятую
          $query_update = substr($query_update, 0, strlen($query_update) - 1);
  
          // запросы будем выполнять пакетами
          // размер пакета установлен в константе
          // разобъем массив на пакеты и будем их проходить
          $data = array_chunk($data, 20);
          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}";
              // \common\components\CustomVarDamp::dumpAndDie($query);
              Yii::$app->db->createCommand($query)->execute();
  
          }
      }
7bfae493   Administrator   Importers CRUD
115
  }