이 글에서는 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 메소드를 통해 데이터를 하나씩 추가한 후 실행을 호출하는 것입니다.
관련 권장 사항:
Yii가 테이블 삭제 오류 보고 문제까지 해결하는 DeleteAll
Yii2는 Xunsou를 통합하여 효율적인 중국어 단어 분할 검색
위 내용은 데이터 일괄 삽입을 위한 Yii 프레임워크의 단순 확장 클래스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!