首页 > php框架 > Yii2.0 批量插入数据的几种方法

Yii2.0 批量插入数据的几种方法

Yii2.0 批量插入数据的方法有不少了,在此我们来给各位整理了三种插入数据的方法,希望这三个例子对各位有帮助.

最近在批量插入数据的时候一直插入数据出错,经过查手册以及度娘,总结出两种方法:

第一种方法:

$model = new User();
foreach
($data as $attributes)
{
     $_model = clone $model;
     $_model->setAttributes($attributes);
     $_model->save();
}

第二种方法

$model = new User();
foreach($data as $attributes)
{
      $model->isNewRecord = true;
      $model->setAttributes($attributes);
      $model->save() && $model->id=0;
}

第三种方法

<?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执行。

永久地址:http://www.phprm.com/frame/76233.html

转载随意~请带上教程地址吧^^

标签:foreach

相关文章

发表留言