php yii 插入,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执行。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值