Maison  >  Article  >  développement back-end  >  Méthode d'implémentation de la classe d'insertion de lots de données dans Yii

Méthode d'implémentation de la classe d'insertion de lots de données dans Yii

巴扎黑
巴扎黑original
2017-08-13 13:38:261432parcourir

Cet article présente principalement la méthode d'implémentation simple de la classe d'extension de données d'insertion par lots du framework Yii, impliquant la classe d'extension Yii et les compétences opérationnelles liées à la base de données. Les amis dans le besoin peuvent s'y référer

Cet article décrit l'insertion par lots de. Framework Yii avec exemples Méthode d’implémentation simple d’insertion d’une classe d’extension de données. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

L'instruction MySQL INSERT permet d'insérer 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 Pour 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 se fait via la méthode add Ajoutez les données une par une, puis appelez exécuter.

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