Yii2 中批量 post 输入数据处理 [ 2.0 版本 ]
规则: 需要在 header
中写入批量的标识: 如: curl -i -H "limit:100"
表示一次输入 100 条数据
重写 rest 中的 createAction
类,run
方法: 判断如果是 header
中标识,执行批量操作。
if (Yii::$app->getRequest()->getHeaders()->get('limit') > 1) {
$result = $model->batchInsert($postData);
} else {
$model->load(Yii::$app->getRequest()->getBodyParams(), '');
$result = $model->save();
}
重写子类 ApiActiveRecord
继承 ActiveRecord
类,创建批量导入的方法,对数据进行格式验证和默认数据写入,做数据初始化处理,然后调用 db
类执行 batchInsert
方法。
class ApiActiveRecord extends ActiveRecord
{
public function batchInsert($batchData)
{
$batchInsertData = [];
foreach ($batchData as $data)
{
$this->load([$this->formName()=>$data]);
//批量插入的数据也需要验证
if (!$this->validate()){
throw new \Exception($this->getErrors());
}
//初始化数据
if (!$this->beforeSave(true)) {
throw new \Exception($this->getErrors());
}
$batchInsertData[] = $this->getDirtyAttributes();
}
if (is_array($batchInsertData) && isset($batchInsertData[0])){
$attibutes = array_keys($batchInsertData[0]);
return Yii::$app->db->createCommand()->batchInsert($this->tableName(), $attibutes, $batchInsertData)->execute();
}else{
throw new \Exception('数据初始化出错');
}
}
}
onezero3623
注册时间:2019-04-20
最后登录:2019-07-29
在线时长:1小时17分
最后登录:2019-07-29
在线时长:1小时17分
- 粉丝0
- 金钱15
- 威望10
- 积分125
共 0 条评论