>  기사  >  백엔드 개발  >  데이터 일괄 삽입을 위한 Yii 프레임워크의 단순 확장 클래스에 대한 자세한 설명

데이터 일괄 삽입을 위한 Yii 프레임워크의 단순 확장 클래스에 대한 자세한 설명

*文
*文원래의
2018-01-03 13:29:261442검색

이 글에서는 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가 잘못된 코드를 필터링하는 방법

Yii가 테이블 삭제 오류 보고 문제까지 해결하는 DeleteAll

Yii2는 Xunsou를 통합하여 효율적인 중국어 단어 분할 검색

위 내용은 데이터 일괄 삽입을 위한 Yii 프레임워크의 단순 확장 클래스에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.