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
|
}
|