欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ThinkPhp5.0模型的使用

程序员文章站 2022-07-13 13:36:37
...

think php5.0 模型的使用

数据的添加

插入数据有三种方法,分别是类的create方法,对象的save方法和插入多条的saveAll方法

        //create方法,传递实例,返回实例,可以获取相应字段
//        $res = User::create(
//            [
//                "username" => "dawn12",
//                "password" => md5("dawn12")
//            ]
//        );
        //插入的时候可能存在数据库中没有的字段,需要添加第二个参数为true
//        $res = User::create(
//            [
//                "username" => "dawn13",
//                "password" => md5("dawn13"),
//                "demo" => "nihao"
//            ]
//        , true);
        //如果限制字段插入值,在第二个参数中添加要插入的字段
//        $res = User::create(
//            [
//                "username" => "dawn14",
//                "password" => md5("dawn14"),
//                "demo" => "nihao"
//            ]
//            , ["username"]);
        //save方法,需要创建对象,此方法返回int类型,插入成功几条数据
//        $userModel = new User();
//        $userModel->username = "dawn21";
//        $userModel->password = md5("dawn21");
//        $res = $userModel->save();
        //save方法中可以直接添加实例的数组,这个较上个方法简单一些
//        $userModel = new User();
//        $res = $userModel->save([
//            "username" => "dawn17",
//            "password" => md5("dawn17")
//        ]);
        //同理,如果插入了数据库中没有的字段,需要调用方法allowFiled,参数和上面的第二个参数一致,true或者是需要插入的字段
//        $userModel = new User();
//        $res = $userModel->allowField(true)->save([
//            "username" => "dawn18",
//            "password" => md5("dawn18"),
//            "demo" => "nihao"
//        ]);
        //saveAll方法添加多条数据,返回添加数据的实例,saveAll方法中可以添加二位数组
//        $userModel = new User();
//        $res = $userModel->saveAll([
//            [
//                "username" => "dawn19"
//            ],
//            [
//                "username" => "dawn20"
//            ]
//        ]);
//        dump($res);

数据的删除

删除数据的方法有类的destroy方法,对象的delete方法,类的where后的delete方法

        //destroy删除数据
//        $res = User::destroy(7);
        //参数可以是闭包函数,传入条件
//        $res = User::destroy(function($query){
//            $query -> where("id", "lt", 10);
//        });
        //对象的delete方法
//        $userModel = User::get(10);
//        $res = $userModel -> delete();
        //可以先调用类的where方法然后执行delete方法删除数据
//        $res = User::where("id", "lt", 12) -> delete();
        //条件横成立代表删除数据库中所有数据
//        $res = User::where("1==1")->delete();
//        dump($res);

数据的更新

更新数据有四种方法,类的update方法,类的where然后update方法,对象的save方法,saveAll方法。
这个推荐的方法是类的where然后update方法和对象的save方法,因为返回值可以判断是否更新

        //update方法,参数是个数组,返回值是修改后的实例,需要注意的是没有修改(调用第二次)也返回这个实例,所以没办法判断是否修改
//        $res = User::update([
//            "id" => 10,
//            "password" => "10"
//        ]);
        //update的第二个参数可以传更新条件,如果更改字段中有id不需要传
//        $res = User::update([
//            "password" => "11"
//        ],["id" => 11]);
        //第二个参数可以传个闭包函数
//        $res = User::update([
//            "password" => "<10"
//        ], function($query){
//            $query -> where("id", "lt", 10);
//        });
        //利用where传更新条件,然后调用update方法,这个返回的是更新数据的个数,可以区分是否更新过,建议使用这个方法
//        $res = User::where("id", "lt", 10)->update([
//            "password" => "<<10"
//        ]);
        //可以先获取实例对象,然后更改属性,然后保存
//        $userModel = User::get(10);
//        $userModel->password = "save 10";
//        $res = $userModel->save();
        //同理save可以添加第二个参数,更新的条件,可以是数组,也可以是闭包函数
//        $userModel = new User();
//        $res = $userModel -> save([
//            "password" => "id save 10"
//        ], ["id" => 10]);
        //多个更新,可以用saveAll方法,但是需要注意的是返回的是实例的数组,所以不建议用
//        $userModel = new User();
//        $res = $userModel->saveAll([
//            [
//                "id" => 10,
//                "password" => "save all 10"
//            ],
//            [
//                "id" => 11,
//                "password" => "save all 11"
//            ]
//        ]);
//        dump($res);

数据的查询

查询数据的四种方法,分别是get,find,select,all

        //1.get方法,获取一条信息,传递id值
//        $res = User::get(7);
        //get方法中可以传闭包,里面添加查询语句,闭包中也可以查询指定字段
//        $res = User::get(function($query){
//            $query->where("username", "eq", "dawn");
//        });
        //2.可以使用where函数,链式结构,可以指定查询字段
//        $res = User::where("id", 10)
//            ->field("id, username")
//            ->find();
        //3.select和find的区别是find查询一个数据,select查询多个数据
//        $res = User::where("id", "lt", 10)
//            ->select();
        //4.all返回的是数据的集合,需要遍历显示
//        $res = User::all("7,8,9");
//        $res = User::all([7,8,9,10]);
//        $res = User::all(function($query){
//            $query->where("id", "lt", 10);
//        });
        //直接查询某个字段对应的值
//        $res = User::where("id", 10)->value("username");
//        dump($res);
//        dump($res->toArray());
//        foreach($res as $val){
//            dump($val->toArray());
//        }

数据的聚合

聚合操作包括查询总个数(count),最大值(max),最小值(min),平均值(avg),总和(sum)

//        $res = User::count();
        //可以通过where添加查询条件
//        $res = User::where("id", "gt", 20)->count();
        //可以通过max方法查询最大值
//        $res = User::max("id");
        //可以通过where添加查询条件
//        $res = User::where("id", "lt", 20) -> max("id");
        //计算总和用sum方法,同样可以使用where方法作为判断
//        $res = User::sum("id");
        //通过avg来获取平均值,也可以通过where来作为筛选
//        $res = User::avg("id");
        //通过min来获取最小值
//        $res = User::min("id");
//        dump($res);

模型器获取

可能有的字段获取的值和显示的值不相同,例如性别,数据库中保存
的是1和2,但是显示的是男和女,所以要对获取的值进行设置
model中设置

public function getSexAttr($val){
    //获取sex字段的方法,名称固定
    switch ($val){
        case 1:
            return "男";
        case 2:
            return "女";
        default:
            return "未知";
    }
}

控制器中

//由于对sex进行获取更改返回,所以返回结果为修改后的结果
$res = User::get(15);
dump($res->toArray());
//获取数据库的原始数据
dump($res->getData());

模型器修改

在模型中对数据进行修改

public function setPasswordAttr($val){
    //此方法名称必须和字段password一致
    return md5($val);
}

方法中可以传递第二个参数$data,可以对传过来的实例进行获取

自动完成

自动完成

//此参数为自动完成字段
protected $auto = [
  'time'
];
public function setTimeAttr(){
    return time();
}

新增的自动完成

//此参数只有在新增的时候有效
protected $insert = [
    'time_insert'
];
public function setTimeInsertAttr(){
    return time();
}

更新的自动完成

//此参数只有在更新的时候有效
protected $update = [
    'time_update'
];
public function setTimeUpdateAttr(){
    return time();
}

时间戳

需要在模型中开启时间戳

//开启时间戳
protected $autoWriteTimestamp = true;

数据库的表对应的字段是create_time和update_time
如果需要改变数据库中的字段则

//设置创建时间的字段
protected $createTime = "create_at";
//关闭更新时间的字段
protected $updateTime = false;
相关标签: 模型