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

*文
Libérer: 2023-03-19 07:30:01
original
1442 Les gens l'ont consulté

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

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

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!

É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