Blame view

backend/models/DetailsCrosses.php 2.94 KB
53edab28   Mihail   add DetailsCrosse...
1
2
3
4
  <?php
  
  namespace backend\models;
  
7776ca75   Mihail   add form, model a...
5
  use common\components\CustomVarDamp;
53edab28   Mihail   add DetailsCrosse...
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  use Yii;
  
  /**
   * This is the model class for table "{{%details_crosses}}".
   *
   * @property string $ID
   * @property string $ARTICLE
   * @property string $BRAND
   * @property string $CROSS_BRAND
   * @property string $CROSS_ARTICLE
   * @property string $timestamp
   */
  class DetailsCrosses extends \backend\components\base\BaseActiveRecord
  {
      /**
7776ca75   Mihail   add form, model a...
21
22
23
24
       * int - размер пакета запроса
       */
      const BATCH = 1000;
      /**
53edab28   Mihail   add DetailsCrosse...
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
       * @inheritdoc
       */
      public static function tableName()
      {
          return '{{%details_crosses}}';
      }
  
      /**
       * @inheritdoc
       */
      public function rules()
      {
          return [
              [['ARTICLE', 'BRAND', 'CROSS_BRAND', 'CROSS_ARTICLE'], 'required'],
              [['timestamp'], 'safe'],
              [['ARTICLE', 'BRAND', 'CROSS_BRAND', 'CROSS_ARTICLE'], 'string', 'max' => 100]
          ];
      }
  
      /**
       * @inheritdoc
       */
      public function attributeLabels()
      {
          return [
              'ID' => Yii::t('app', 'ID'),
              'ARTICLE' => Yii::t('app', 'Article'),
              'BRAND' => Yii::t('app', 'Brand'),
              'CROSS_BRAND' => Yii::t('app', 'Cross  Brand'),
              'CROSS_ARTICLE' => Yii::t('app', 'Cross  Article'),
              'timestamp' => Yii::t('app', 'Timestamp'),
          ];
      }
7776ca75   Mihail   add form, model a...
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
  
      /**
       * вставка данных с игнором дублей прямым запросом SQL
       * @param $data - массив вставляемых данный, вставка будет прозводится пакетами размером указанным в константе BATCH
       * @throws \yii\db\Exception
       */
      //@todo - вынести все ручные инсерты в отдельный класс
      public function ManualInsertWithIgnore( $data )
      {
          // \common\components\CustomVarDamp::dumpAndDie($data);
          $table_name = self::tableName();
          $keys_arr = array_keys($data[0]);
  
          // запросы будем выполнять пакетами
          // размер пакета установлен в константе
          // разобъем массив на пакеты и будем их проходить
          $data = array_chunk($data, $this::BATCH);
          foreach ($data as $current_batch_array) {
  
              //воспользуемся пакетной вставкой от фреймворка
              $query = Yii::$app->db->createCommand()->batchInsert($table_name, $keys_arr, $current_batch_array)->sql;
              // добавим ключевое слово - ignore
              $query = preg_replace('/INSERT/','INSERT IGNORE', $query);
d11ec8b2   Mihail   fixed permissions...
81
82
              $rows = Yii::$app->db->createCommand($query)->execute();
  
e323ebc1   Mihail   fixed issues with...
83
84
85
86
  //            // если нет результата вернемся с ошибкой
  //            if ( $rows == 0 ) {
  //                return false;
  //            }
7776ca75   Mihail   add form, model a...
87
88
  
          }
d11ec8b2   Mihail   fixed permissions...
89
90
91
  
          return true;
  
7776ca75   Mihail   add form, model a...
92
      }
53edab28   Mihail   add DetailsCrosse...
93
  }