Blame view

backend/models/DetailsCrosses.php 2.74 KB
91c8f898   Mihail   add DetailsCrosse...
1
2
3
4
  <?php
  
  namespace backend\models;
  
706a1491   Mihail   add form, model a...
5
  use common\components\CustomVarDamp;
91c8f898   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
  {
      /**
706a1491   Mihail   add form, model a...
21
22
23
24
       * int - размер пакета запроса
       */
      const BATCH = 1000;
      /**
91c8f898   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'),
          ];
      }
706a1491   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
81
82
83
84
  
      /**
       * вставка данных с игнором дублей прямым запросом 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);
              Yii::$app->db->createCommand($query)->execute();
  
          }
      }
91c8f898   Mihail   add DetailsCrosse...
85
  }