php 更新单条数据,1.单条更新:save方法

## 单条记录更新:save( )方法

#### 1. 功能:更新表中满足条件的单条记录。

>[info] save方法每次仅能更新一条记录,所以适用于根据主键更新数据。

* * * * *

#### 2. 参数与返回值

* 参数:

| 序号 | 参数 | 说明 |

| :---: | --- | --- |

| 1 | $array / 一维数组 | 带主键且键名与表中字段名对应的一维数组 |

* 返回值:

| 序号 | 参数 | 说明 |

| :---: | --- | --- |

| 1 | $integer / 整数 | 更新成功,返回受影响记录数量 |

| 2 | false | 更新失败返回布尔值:假 |

* * * * *

#### 3. 实例演示

>[info] 根据主键更新有二种情形:

>1. 主键来自于表中记录;

>2. 主键由用户自己设定;

一、更新tp5_staff表中id等于1011的记录,将姓名name更新为:朱老师,工资salary更新为5000;

>[danger] 第一种情况:主键来自表中记录

* 步骤:

1. 从表中取出id=1011的记录,来初始化模型对象,得到数据对象;

2. 对数据对象中id=1011的数据,更新以name和salary为键名的数组元素;

3. 将更新后的原始数据,写到表中对应记录中,完成更新操作。

* 关于模型Staff.php的创建,与前面是完全一样的,此处就不再赘述啦~~

* 我们先查看一下更新前的数据:

![](https://box.kancloud.cn/86a064b8243f95bc3dbd7c3d7c2fa4b3_590x314.png)

* 控制器:Index.php

~~~

namespace app\index\controller;

//导入自定义模型类

use app\index\model\Staff;

class Index {

public function index(){

//1.从表中取出id=1011的数据

$data = Staff::get(1011);

//2.查看从表中取出的数据

echo '1. 查看从表中取出的数据:
';

dump($data->getData());

//3.修改数据对象中与表字段对应的原始数据:$data属性

$data -> setAttr('name','朱老师');

$data -> setAttr('salary',5000);

//4.更新表中记录

$affected = $data -> allowField(true) -> save();

//5.查看更新后的数据

echo '2. 查看更新后的数据:
';

dump($data -> getData());

//6.判断是否成功,并给出反馈信息

if (!empty($affected)) {

echo '更新成功!';

}else{

echo '更新失败~~';

}

}

}

~~~

>[warning] allowField( ) 限制允许更新定段列表,true:过滤非表字段。也可直接写字段列表,如'name,age,salary'等,即仅接受这3个字段更新,其它字段忽略。

* 查看运行结果:

~~~

1. 查看从表中取出的数据:

array(7) {

["id"] => int(1011)

["name"] => string(9) "张老师"

["sex"] => int(1)

["age"] => int(49)

["salary"] => float(2800)

["dept"] => int(1)

["hiredate"] => string(10) "2005-10-20"

}

2. 查看更新后的数据:

array(7) {

["id"] => int(1011)

["name"] => string(9) "朱老师"

["sex"] => int(1)

["age"] => int(49)

["salary"] => int(5000)

["dept"] => int(1)

["hiredate"] => string(10) "2005-10-20"

}

更新成功!

~~~

>[warning] 为了演示底层实现细节,上面的代码写得比较冗长。现在我们来简化代码:

* 简化后的控制器代码:

~~~

namespace app\index\controller;

//导入自定义模型类

use app\index\model\Staff;

class Index {

public function index(){

//1.从表中取出id=1011的数据

$data = Staff::get(1011);

//2.更新数据对象:魔术方法实现

$data -> name = '朱老师';

$data -> salary = 5000;

//3.更新表中数据,并反馈执行结果

echo ($data -> allowField(true) -> save()) ? '更新成功!' : '更新失败~~';

}

}

~~~

* 简化后的代码运行结果:

~~~

更新成功!

~~~

* 再看查询表中数据:更新成功!

![](https://box.kancloud.cn/0e0e64eb2b110289eb84e30b5296b560_592x300.png)

* * * * *

>[danger] 第二种情况:更新主键由用户自己定义

**任务:** 更新tp5_staff表中id =1007的记录,将姓名name更新为:'马金莲'。

* 更新前id =1007的数据:

![](https://box.kancloud.cn/a9eda7f788f8bd62c4b9471d72cfe896_591x291.png)

* 控制器:Index.php

~~~

namespace app\index\controller;

//导入自定义模型类

use app\index\model\Staff;

class Index {

public function index(){

//设置更新条件

$where = ['id'=> 1007];

//设置更新数据

$data = [];

$data['name'] = '马金莲';

//执行更新操作

$affected = (new Staff) -> allowField(true) -> save($data,$where);

//反馈执行结果

echo $affected ? '更新成功!' : '更新失败~~';

}

}

~~~

>[warning] 注意:save方法并不能自动识别更新数据对象中的更新主键id,必须单独设置更新条件做为第二个参数,这与saveAll方法不同,一定要注意。

* 更新完成后,表中数据如下:

![](https://box.kancloud.cn/8de13bf96518f799f04bc942a233f3fc_589x308.png)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值