Implementierungsmethode der Klasse zum Einfügen von Datenstapeln in Yii

巴扎黑
Freigeben: 2023-03-15 06:20:01
Original
1450 Leute haben es durchsucht

In diesem Artikel wird hauptsächlich die einfache Implementierungsmethode der Batch-Einfüge-Datenerweiterungsklasse des Yii-Frameworks vorgestellt, die Kenntnisse über die Yii-Erweiterungsklasse und datenbankbezogene Operationen umfasst.

Dieser Artikel beschreibt die Batch-Einfügung von Yii-Framework mit Beispielen Einfache Implementierungsmethode zum Einfügen einer Datenerweiterungsklasse. Teilen Sie es zur Referenz mit allen. Die Details lauten wie folgt:

Die MySQL INSERT-Anweisung ermöglicht das Einfügen mehrerer Datenzeilen, wie unten gezeigt:


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

Dann implementieren Bei der Stapeleinfügung besteht die Hauptaufgabe darin, die Daten in Spaltenreihenfolge in das obige Format zusammenzustellen, was mit den Funktionen sprintf und vsprintf erreicht werden kann.

Das Folgende ist ein einfaches Beispiel einer Yii-Erweiterungsklasse, die die Stapeleinfügung implementiert (unterstützt Daten vom Typ 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();
  }
}
Nach dem Login kopieren

Die Verwendungsmethode erfolgt über die Add-Methode. Fügen Sie die Daten nacheinander hinzu und rufen Sie dann die Ausführung auf.

Das obige ist der detaillierte Inhalt vonImplementierungsmethode der Klasse zum Einfügen von Datenstapeln in Yii. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage