Thinkphp6(7)模型学习与知识总结(三)
继续学习模型的知识,上节课已学习到的知识有查询、软删除、自动时间戳。
今天来学习:
1.数据更新,
2. 获取器
3.修改器
◆数据更新
1.使用find()方法获取数据,然后通过save()方法保存修改,返回布尔值
2.通过 where()方法结合find()方法的查询条件获取的数据,进行修改
3.save()方法只会更新变化的数据,如果提交的修改数据没有变化,则不更新
更新时:如果要执行SQL函数更新,可以使用下面的方法
4.但如果你想强制更新数据,即使数据一样,那么可以使用 force()方法Suser->force()->save()
5. 字段过滤
默认情况下会过滤非数据表字段的数据,如果你通过外部提交赋值给模型,并且希望指定某些字段写入,可以使用:
$user = User::find(1);
// post数组中只有name和email字段会写入
$user->allowField(['name', 'email'])->save($_POST);
最佳用法是在传入模型数据之前就进行过滤,例如:
$user = User::find(1);
// post数组中只有name和email字段会写入
$data = Request::only(['name','email']);
$user->save($data);
6. 批量更新数据
可以使用saveAll方法批量更新数据,只需要在批量更新的数据中包含主键即可,
7. 直接更新(静态方法)
使用模型的静态update方法更新:
User::update(['name' => 'thinkphp'], ['id' => 1]);
模型的update方法返回模型的对象实例
如果你的第一个参数中包含主键数据,可以无需传入第二个参数(更新条件)
User::update(['name' => 'thinkphp', 'id' => 1]);
如果你需要只允许更新指定字段,可以使用
User::update(['name' => 'thinkphp', 'email' => 'thinkphp@qq.com'], ['id' => 1], ['name']);
上面的代码只会更新name字段的数据。
====学习测试====
★测试1
//学习数据更新方法
public function update()
{
//先查询到第17条记录,再把其中的user_status更新为2
$data=Users::find(17);
$data->user_status=2;
$res=$data->save();
print_r($res);
}
★测试2.成功把user_status自增加1
★测试3 静态方法update方法有三个参数
update([修改的数据可以是数组],【指定id】【指定可修改的字段】)
$res=$users=Users::update([
'id'=> 15,
'user_mobile'=> '13900000001'
]);
print_r($res);
它返回是一个对象
◆模型的获取器
1.获取器的作用是对模型实例的数据做出自动处理:
2.一个获取器对应模型的一个特殊方法,该方法为 public;
3.方法名的命名規范为: get字段Attr():
4.举个例子,数据库表示状态 status字段采用的是数值.而页面上,我们需要输出 status字段希望是中文,就可以使用获取器:
====学习测试====
★测试:首先建立一个获取器代码
public function getStatusAttr($value)
{
$status=[0=>'管理员',1=>'在编',2=>'镇聘',3=>'学校管理员'];
return $status[$value];
}
再查询出数据来
如果字段名是有下划线的FieldName要用驼峰转换
如模型中有了修改器,打印输出的是修改后的数据了,那我想输出原来的数据,怎么办呢:用getData方法
◆模型的修改器
模型修改器的作用,就是对模型设置对象的值进行处理比如,我们要新増数据的时候,对数据就行格式化、过滤、转换等处理模型
修改器的命名规则为: setFieldAttr,
我们要设置一个新増,规定邮箱的英文都必须大写,修改器如下
public function setEmallAttr(svalue){
return strtoupper(Svalue)}
.除了新增,会调用修改器,修改更新也会触发修改器
.模型修改器只对模型方法有效,调用数据库的方法是无效的,
比如-> insert();
===学习测试===