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'), ]; } /** * вставка данных с игнором дублей прямым запросом 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); $rows = Yii::$app->db->createCommand($query)->execute(); // если нет результата вернемся с ошибкой if ( $rows == 0 ) { return false; } } return true; } }