Maison >développement back-end >tutoriel php >Explication détaillée de la classe d'extension simple du framework Yii pour l'insertion de données par lots
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);
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(); } }
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!