詳解Yii框架批量插入資料的簡單擴展類

*文
發布: 2023-03-19 07:30:01
原創
1327 人瀏覽過

本文主要介紹了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類型資料):

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整合迅搜實現高效能中文分詞檢索

#

以上是詳解Yii框架批量插入資料的簡單擴展類的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!