詳解Yii架構批量插入資料的簡單擴充類

來源:互聯網
上載者:User
本文主要介紹了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方法逐個加入資料,然後調用execute執行。

相關推薦:

Yii如何過濾不良代碼

Yii解決DeleteAll連表刪除報錯問題

Yii2整合迅搜實現高效中文分詞檢索

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.