6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作

吞观暇赁录潜遣硷滑汹嘲驶镜

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第1张

不添加更新条件是添加操作:

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $staff=new Staff();
        $data=['name'=>'岳不群','age'=>80];
        $staff->save($data);
        dump($staff->getData());
    }
}

执行:

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第2张

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第3张


将id=18的韦小宝的名字改为岳不群

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $staff=new Staff();
        $data=[
            'id'=>18,
            'name'=>'岳不群',
            'age'=>80
        ];
        $staff->save($data);
        dump($staff->getData());
    }
}

执行报错,因为系统并不能识别出当前是更新操作:

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第4张

显式指明当前是更新操作

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $staff=new Staff();
        $data=[
            'id'=>18,
            'name'=>'岳不群',
            'age'=>80
        ];
        $staff->isUpdate(true)->save($data);
        dump($staff->getData());
    }
}

执行:

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第5张

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第6张


save()传入第二个条件将id=18的岳不群改为天山童姥

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $staff=new Staff();
        $data=[
            'name'=>'天山童姥',
            'age'=>80
        ];
        $where=['id'=>18];
        $staff->save($data,$where);
        dump($staff->getData());
    }
}

执行:

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第7张

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第8张


updateAll()更新多条数据

将id=20,23,28的员工信息更新

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        $staff=new Staff();
        $data=[
            ['id'=>20,'name'=>"吴三桂2号"],
            ['id'=>23,'name'=>"林平之2号"],
            ['id'=>28,'name'=>"岳不群2号"],
        ];
        $staff->isUpdate()->saveAll($data);
        dump($staff);
    }
}

执行:

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第9张

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第10张


update()静态调用更新数据

将id=23的林平之2号改为韦一笑

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        //update(更新数据,更新条件,允许更新的字段)
        $data=['name'=>'韦一笑','age'=>59,'salary'=>5600];//更新数据
        $where=['id'=>23];//更新条件
        $fields=['name','age'];//允许更新的字段

        //执行更新操作
        $result=Staff::update($data,$where,$fields);
        dump($result->getData());

    }
}

执行:

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第11张

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第12张

可以看到只有name,age字段更新,这是因为只允许更新这两个字段

允许对salary进行修改

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        //update(更新数据,更新条件,允许更新的字段)
        $data=['name'=>'韦一笑','age'=>59,'salary'=>5600];//更新数据
        $where=['id'=>23];//更新条件
        $fields=['name','age','salary'];//允许更新的字段

        //执行更新操作
        $result=Staff::update($data,$where,$fields);
        dump($result->getData());

    }
}

执行:

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第13张

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第14张


使用闭包,当条件很复杂时会很有用

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        //update(更新数据,更新条件,允许更新的字段)
        $data=['name'=>'韦一笑','age'=>59,'salary'=>5600];//更新数据
        $where=function($query){
            $query->where('id=23');
        };
        $fields=['name','age','salary'];//允许更新的字段

        //执行更新操作
        $result=Staff::update($data,$where,$fields);
        dump($result->getData());

    }
}

执行:

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第15张

闭包传入外部变量

使用外部变量将id=18的天山童姥的年龄改为59

<?php
namespace app\index\controller;
use app\index\model\Staff;
class Index
{
    public function index()
    {
        //使用外部变量将id=18的天山童姥的年龄改为50
        $id=18;
        //update(更新数据,更新条件,允许更新的字段)
        $data=['age'=>59];//更新数据
        $where=function($query) use($id){
            $query->where('id','=',$id);
        };
        $fields=['age'];//允许更新的字段

        //执行更新操作
        $result=Staff::update($data,$where,$fields);
        dump($result->getData());

    }
}

执行:

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第16张

6-11ThinkPHP5用模型来更新数据表中的数据:sava()/savaAll()/update()操作第17张


屋畔卢芭馁埂俺失蚊醛活判短