Maison >développement back-end >tutoriel php >Explication détaillée de la classe d'extension simple du framework Yii pour l'insertion de données par lots

Explication détaillée de la classe d'extension simple du framework Yii pour l'insertion de données par lots

*文
*文original
2018-01-03 13:29:261495parcourir

Cet article présente principalement la méthode d'implémentation simple d'insertion par lots de classes d'extension de données dans le framework Yii, impliquant des classes d'extension Yii et des compétences opérationnelles liées à la base de données. Les amis dans le besoin peuvent s'y référer. J'espère que cela aide tout le monde.

L'instruction MySQL INSERT permet l'insertion de plusieurs lignes de données, comme indiqué ci-dessous :

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

Ensuite, pour implémenter l'insertion par lots, la tâche principale est d'assembler les données dans le format ci-dessus dans l'ordre des colonnes, ce qui peut être réalisé à l'aide des fonctions sprintf et vsprintf.

Ce qui suit est un exemple simple d'une classe d'extension Yii qui implémente l'insertion par lots (prend en charge les données de type VARCHAR) :

<?php
/**
 * class for sql batch insert
 */
class CDbBICommand extends CDbCommand{
  /** @var CActiveRecord $class */
  private $class;
  /** @var string $insert_tpl */
  private $insert_tpl = "insert into %s(%s) ";
  /** @var string $value_tpl */
  private $value_tpl = "(%s)";
  /** @var string $query */
  public $query;
  /** @var CDbColumnSchema[] $columns */
  private $columns;
  /** @var boolean $fresh */
  private $fresh;
  /** @param CActiveRecord $class
   * @param CDbConnection $db
   */
  public function __construct($class,$db){
   $this->class = $class;
   $this->createtpl();
   parent::_construct($db);
  }
  private function createtpl(){
   $this->fresh = true;
   $value_tpl = "";
   $columns_string = "";
   $this->columns = $this->class->getMetaData()->tableSchema->columns;
   $counter = 0;
   foreach($this->columns as $column){
    /** @var CDbColumnSchema $column */
    if($column->autoIncrement){
     $value_tpl .= "0";
    }else{
     $value_tpl .= "\"%s\"";
    }
    $columns_string .= $column->name;
    $counter ++;
    if($counter != sizeof($this->columns)){
     $columns_string .= ", ";
     $value_tpl .= ", ";
    }
   }
   $this->insert_tpl = sprintf($this->insert_tpl, $this->class->tableName(), $columns_string);
   $this->value_tpl = sprintf($this->value_tpl, $value_tpl);
  }
  /**
   * @param CActiveRecord $record
   */
  public function add($record){
   $values = array();
   $i = 0;
   foreach($this->columns as $column){
    if($column->autoIncrement){
     continue;
    }
    $values[$i] = $this->class->{$column->name};
    $i ++;
   }
   if(!$this->fresh){
    $this->query .= ",";
   }else{
    $this->query = "values";
   }
   $this->fresh = false;
   $this->query .= vsprintf($this->value_tpl, $values);
   return true;
  }
  public function execute(){
   $this->setText($this->insert_tpl." ".$this->query);
   return parent::execute();
  }
}

La méthode d'utilisation consiste à ajouter des données une par une via le ajoutez la méthode, puis appelez exécuter.

Recommandations associées :

Comment Yii filtre les mauvais codes

Yii résout le problème d'erreur de suppression de la table de connexion DeleteAll

Yii2 intègre Xunsou pour obtenir une récupération efficace de la segmentation des mots chinois

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn