この記事では主に、Yii フレームワークにデータ拡張クラスを一括挿入する簡単な実装方法を紹介します。Yii 拡張クラスとデータベース関連の操作スキルが必要な友人は参考にしてください。お役に立てれば幸いです。
MySQL INSERT ステートメントでは、以下に示すように、複数行のデータを挿入できます。
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
次に、バッチ挿入を実装するための主なタスクは、データを列順に上記の形式にアセンブルすることです。これは、 sprintf 関数と vsprintf 関数。
以下は、バッチ挿入を実装する Yii 拡張クラスの簡単な例です (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(); } }
使用方法は、add メソッドでデータを 1 つずつ追加してから、execute を呼び出します。
関連する推奨事項:
Yii は DeleteAll 偶数テーブル削除エラー報告の問題を解決します
Yii2 は Xunsou を統合して効率的な中国語単語の分割を実現します取得
以上がデータを一括挿入するための Yii フレームワークの単純な拡張クラスの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。