Maison > développement back-end > tutoriel php > 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

巴扎黑
Libérer: 2023-03-15 06:20:01
original
1456 Les gens l'ont consulté

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);
Copier après la connexion

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();
  }
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal