Thinkphp6(7)模型学习与知识总结(三)

2022-10-25 15:17:13 浏览数 (1)

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();

===学习测试===

0 人点赞