Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung der einfachen Erweiterungsklasse des Yii-Frameworks zum Batch-Einfügen von Daten

Ausführliche Erläuterung der einfachen Erweiterungsklasse des Yii-Frameworks zum Batch-Einfügen von Daten

*文
*文Original
2018-01-03 13:29:261458Durchsuche

In diesem Artikel wird hauptsächlich die einfache Implementierungsmethode zum Batch-Einfügen von Datenerweiterungsklassen im Yii-Framework vorgestellt, die Yii-Erweiterungsklassen und datenbankbezogene Betriebsfähigkeiten umfasst. Ich hoffe, es hilft allen.

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);

Um dann die Stapeleinfügung zu implementieren, besteht die Hauptaufgabe darin, die Daten im oben genannten Format zusammenzusetzen in Spaltenreihenfolge, 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();
  }
}

Die Verwendungsmethode besteht darin, Daten einzeln hinzuzufügen Methode hinzufügen und dann ausführen aufrufen.

Verwandte Empfehlungen:

Wie Yii fehlerhaften Code filtert

Yii löst das Fehlerproblem beim Löschen der Verbindungstabelle „DeleteAll“

Yii2 integriert Xunsou, um einen effizienten Abruf der chinesischen Wortsegmentierung zu erreichen

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der einfachen Erweiterungsklasse des Yii-Frameworks zum Batch-Einfügen von Daten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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