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);
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(); } }
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!