php saveall,savaAll方法

同时新增多条记录:saveAll方法

2. 源码:/thinkphp/library/think/Model.php/**

* 保存多个数据到当前数据对象

* @access public

* @param array     $dataSet 数据

* @param boolean   $replace 是否自动识别更新和写入

* @return array|false

*/public function saveAll($dataSet, $replace = true){if ($this->validate) {// 数据批量验证$validate = $this->validate;foreach ($dataSet as $data) {if (!$this->validate($validate)->validateData($data)) {return false;

}

}

}$result = [];$db     = $this->db();$db->startTrans();try {$pk = $this->getPk();if (is_string($pk) && $replace) {$auto = true;

}foreach ($dataSet as $key => $data) {if (!empty($auto) && isset($data[$pk])) {$result[$key] = self::update($data);

} else {$result[$key] = self::create($data);

}

}$db->commit();return $result;

} catch (\Exception $e) {$db->rollback();throw $e;

}

}可以看出这个方法有一个必填参数:二维数组

3. 参数与返回值

参数

参数虽有2个,但我们只需要第一个即可

序号参数说明1$dataSet / 二维数组键名应与表中字段名一致,记录与数组元素一一对应

返回值:由数据对象构成的对象数组。

注意:不是受影响的记录数量

4. 实例演示

任务:给tp5_staff表中新增3条员工信息。创建模型: /application/index/model/Staff.php

namespace app\index\model;//导入模型类use think\model;class Staff extends model {//自定义模型类代码}创建控制器:/application/index/controller/Index.php

//创建数据  $data[] = ['name'=>'阿芳','sex'=>0,'age'=>19,'salary'=>3000,'hiredate'=>date('Y-m_d',time())];

$data[] = ['name'=>'阿勇','sex'=>1,'age'=>20,'salary'=>4500,'hiredate'=>date('Y-m_d',time())];

$data[] = ['name'=>'阿华','sex'=>1,'age'=>39,'salary'=>6800,'hiredate'=>date('Y-m_d',time())];

//创建模型对象  $model = new Staff();      //执行新增操作,返回对象数组,数组元素数量与新增数据相同  //每个对象数据元素,都是一个数据对象$data  $result = $model

-> allowField(true)

-> saveAll($data);      //3.验证是否新增成功  echo $result ? '新增成功!' : '新增失败!';      //4.查看新增的数据集    echo '
 新增的数据如下: 
';      //5.对象数组,需要用循环输出  foreach ($result as  $value) {          //获取对象数组中,每一个数据对象的原始数据  $data = $value -> getData();//内循环中遍历输出每个数据对象中的原始数据  foreach ($data as $key => $value) {              echo $key.'=>'.$value.' | ';

}          echo '
';

}

}

}运行结果:新增成功!

新增的数据如下:

name=>阿芳 | sex=>0 | age=>19 | salary=>3000 | hiredate=>2016-11_25 | id=>1141 |

name=>阿勇 | sex=>1 | age=>20 | salary=>4500 | hiredate=>2016-11_25 | id=>1142 |

name=>阿华 | sex=>1 | age=>39 | salary=>6800 | hiredate=>2016-11_25 | id=>1143 |生成的SQL语句:INSERT INTO `tp5_staff` (`name` , `sex` , `age` , `salary` , `hiredate`) VALUES ('阿芳' , 0 , 19 , 3000 , '2016-11_25')INSERT INTO `tp5_staff` (`name` , `sex` , `age` , `salary` , `hiredate`) VALUES ('阿勇' , 1 , 20 , 4500 , '2016-11_25')INSERT INTO `tp5_staff` (`name` , `sex` , `age` , `salary` , `hiredate`) VALUES ('阿华' , 1 , 39 , 6800 , '2016-11_25')我们现在查看一下数据表:SQLPRP for MySQL

php saveall,savaAll方法_第1张图片

5. 总结:尽管在实际开发中,saveAll方法使用频率远不如save方法,但有时还是非常有用的,希望同学们多多练习并掌握它。

你可能感兴趣的:(php,saveall)