ThinkPhp5.0模型的使用

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值