tp5学习笔记7

1、模型(model)

数据模型

2、新建数据模型

1) 手动新建

    在model目录下 新建 User.php

        // 声明命名空间
        namespace app\index\model;

        // 导入系统的数据模型

        use think\Model;

        // 声明user模型

        class User extends Model{

        }
    注意

    1、数据模型的名字 建议大家跟数据库名一致

    2、如果数据库名字和模型名不一致 可以设置表名

        protected $table="";

    3、如果表名(yzm_user),数据模型名 (YzmUser)

3、模型的实例化

1、调用静态方法

    $res=User::get(1);
    dump($res->toArray());

2、实例化数据模型

    $user=new User();
    $res=$user::get(2);
    dump($res->toArray());

3、使用loader

    $user=Loader::model("user");
    $res=$user::get(3);
    dump($res->toArray());

4、使用助手函数

    $user=model("user");
    $res=$user::get(4);
    dump($res->toArray());

4、查询操作

1、单条数据

    // get方法
        // 使用数字
        $res=User::get(1); // 默认主键
        // 使用数组
        $res=User::get(["name"=>'yzmedu3']);  // 默认查找用户名

        // 使用闭包函数
        $res=User::get(function($query){
            $query->where("id",15);
        });
    // find方法

        $res=User::where("id",13)->find();

2、查询多条数据

    // all
        // 所有数据
        $res=User::all();

        // 字符串
        $res=User::all("1,2,3");

        // 数组
        $res=User::all([5,6,7]);

        // 数组

        $res=User::all(['pass'=>'123']);

        // 闭包

        $res=User::all(function($query){
            $query->where("pass","123")
                ->whereOr("pass","456")
                ->order("id","desc");
        });

    // select 和 all 基本类似

        $res=User::select();
        $res=User::limit(2)->select();

3、获取某个字段和某列值

    // 获取某个值
    $res=User::where("id",5)->value("name");

    // 获取某列值

    $res=User::column("name","id");

4、动态查询
    // 查询出匹配到的第一条数据
    // getBy字段名
    $res=User::getByAge('44');
    dump($res->toArray());

5、增加操作

1、设置属性
    $user=new User();
    $user->name="yzmedu21";
    $user->pass="abc";
    $user->age=18;
    // 返回影响行数
    $user->save();

2、通过data方法
    $user=new User();

    $user->data([
        "name"=>"yzmedu22",
        "age"=>"22",
        "pass"=>"qwe",
        ]);

    // 返回影响行数
    $user->save();

3、实例化时

    $user=new User([
        "name"=>"yzmedu23",
        "pass"=>'zxc',
        "age"=>20
        ]);
    // 返回影响行数
    $user->save();
    // allowField 屏蔽掉数据库中不存在的字段
    $user->allowField(true)->save();
    // 指定插入数据库的字段
    $user->allowField(['name','age'])->save();

4、获取自增的ID
    // 获取插入数据ID
    echo $user->id;

5、增加多条数据

    $user=new User();

    $list=[
        ['name'=>"yzmedu33","age"=>33],
        ['name'=>"yzmedu34","age"=>34]

    ];

    $user->saveAll($list);

6、create方法
    $user=User::create([
        "name"=>"yzmedu35",
        "age"=>35
        ]);

6、删除操作

// $user=User::get(1);
// 返回影响行数
// dump($user->delete());

// 删除主键2
$user=User::destroy(2);

// 删除主键3,4,5
$user=User::destroy("3,4,5");
$user=User::destroy([6,7,8]);

// 删除name

$user=User::destroy(['name'=>"yzmedu23"]);

// 删除多个条件

$user=User::destroy(['name'=>'yzmedu33','age'=>33]);

// 使用闭包

$user=User::destroy(function($query){

    $query->where("id","<","15");
});

// 删除数据

$user=User::where("id",">","19")->delete();

dump($user);

7、修改操作

// 设置字段更新数据

       $user=User::get(15);

       $user->age=19;

       $res=$user->save();

// 直接数组修改

    $user=new User;

    $res=$user->save(
        [
            "pass"=>"qweasd",
            "age"=>16,

        ],["id"=>16]);

// 修改数据

    $_POST['name']="yzmedu55";
    $_POST['pass']="pass55";
    $_POST['age']="55";
    $_POST['sex']="nan";
    $_POST['id']=17;

    $user=new User;

    $res=$user->allowField(['name','pass','age'])->save($_POST,['id'=>17]);

// 批量更新
$data=[
        ['id'=>15,'name'=>"abc",'pass'=>456],
        ['id'=>17,'name'=>"abc",'pass'=>456],
    ];

    $user=new User;

    $res=$user->saveAll($data);

    echo User::getLastSql();

// 更新操作

    $user=new User;

    $res=$user->where("id",'>','17')->update(['age'=>18]);

    $res=User::where("id","<","18")->update(['pass'=>'zxc']);

// 闭包更新数据

    $user=new User;

    $res=$user->save(['name'=>'yunzhimeng'],function($query){
        $query->where("id","15");
    });

8、聚合

// 统计数据条数
$tot=User::count();

dump($tot);

// 条件判断
$tot=User::where("age",">",18)->count();
dump($tot);

// 统计最大值

$max=User::max('age');

dump($max);

// 统计最小值

$min=User::min("age");

dump($min);

// 平均值
$avg=User::avg('age');

dump($avg);

// 求和
$sum=User::sum('age');
dump($sum);

9、获取器

1、数据模型

    // sex 的获取器
    public function getSexAttr($val){
        switch ($val) {
            case '0':
                return "未知";
                break;
            case "1":
                return "男";
                break;
            case "2":
                return "女";
                break;
        }
    }
2、控制器

    // 获取ID为15 的数据
    $user=User::get(17);

    // 经过获取器的操作
    dump($user->toArray()); 
    dump($user->sex);

    // 不经过获取器处理
    dump($user->getData());
3、注意

    1、如果字段 user_status 修改器名字getUserStatusAttr
    2、如果字段 status 修改器名字getStatusAttr

10、修改器

1、数据模型
    // 用户密码的修改器

    public function setPassAttr($val){

        return md5($val);
    }
2、控制器

    // 修改 ID 为15 的密码

    $user=new User();

    // 密码会实现自动加密
    $res=$user->save(['pass'=>'456'],['id'=>15]);

    dump($res);
3、注意

    1、修改器的触发条件是 save方法

11、自动完成

1、修改器和自动完成区别

    修改器:数据赋值的时候自动进行转换处理
    自动完成:没有手动赋值的情况下进行手动处理

2、自动完成

    // 增加和修改操作都会执行
    protected $auto=[];
    // 创建数据执行
    protected $insert=['create_time'];
    // 修改数据执行
    protected $update=['update_time'];

12、时间戳

1、系统支持自动写入创建和更新的时间戳字段
    1) 在配置文件中设置
        // 自动写入时间戳字段
        'auto_timestamp'  => true,

    2) 在数据模型中设置

        // 设置自动写入时间戳
        protected $autoWriteTimestamp=true;

2、可以设置字段默认值

    // 增加时间的字段
    protected $createTime='create_times';
    // 更新时间的字段
    protected $updateTime='update_times';

3、取消更新时间戳设置

    protected $updateTime=false;

13、软删除

1、作用:

    实现假删除,可以进行恢复

2、实现

    <?php 
        // 声明命名空间
        namespace app\index\model;
        // 导入系统的数据模型
        use think\Model;
        // 配合软删除
        use traits\model\SoftDelete;
        // 声明user模型
        class User extends Model{
            // 使用软删除
            use SoftDelete;
            // 设置删除的时间戳
            protected $deleteTime="delete_times";

        }

3、控制器    
        1、删除数据

        $res=User::destroy(15);

    2、获取数据

        $res=User::get(15);
        // 软删除 数据库数据存在,但是get获取不到

    3、直接删除数据

           $res=User::destroy(14,true);

           $user=new User();

           $res=$user->where("id",'5')->delete();

       4、读取所有数据包含软删除数据

        $res=User::withTrashed()->find(15);
        $res=User::withTrashed()->select();

    5、仅仅读取软删除数据

        $res=User::onlyTrashed()->select();
        $res=User::onlyTrashed()->find(1);

  • thinkCMF上传图片

    thinkCMF上传图片 1、要使用这个功能,首先要引入框架自带的admin.js或者frontend.js文件 再上传的地方添加 1234567891011121314151617181920212223242526...

    thinkCMF上传图片
  • 小程序开发

    小程序开发 获取access_token要将申请的测试号的appid和secret填在相应的位置,而不是填公众号的appid和secret。

    小程序开发
  • global与GLOBAL区别

    global与GLOBAL区别 1.有些场合需要全局变量的出现,如下例子:<?php$name=”why”;//定义变量name,并初始化function echoName(){//试图引用函数外面的变量echo “m...

    global与GLOBAL区别
  • PHP取整

    PHP取整 1.直接取整,舍弃小数,保留整数:intval($a);2.四舍五入取整:round($a);3.向上取整,有小数就加1:ceil($a);4.向下取整:floor($a)。

    PHP取整
  • 为什么PHP变量以$开头

    PHP变量 ​ Because PHP was based on Perl which used $, though the symbols Perl used were meaningful andplenty us...

    为什么PHP变量以$开头
  • PHP超全局变量

    PHP超全局变量 PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。 PHP 超级全局变量列表: $GLOBALS $G...

    PHP超全局变量
  • 面试准备

    PHP面试题目 1、阿里PHP面试​ https://blog.csdn.net/qishouzhang/article/details/47007177 1、get与post的区别​ 最直观的区别就是GET把参数...

    面试准备
  • tp5学习笔记9

    tp5学习笔记9 1、验证器1) 控制器中使用验证器 // 实例化验证器类 $validate=new Validate( [ &q...

    tp5学习笔记9
  • tp5学习笔记8

    tp5学习笔记8 1、视图a) 加载页面 1、继承系统控制器类 return $this->fetch(参数1,参数2,参数3,参数4); 参数1(字符串): 模板...

    tp5学习笔记8
  • tp5学习笔记6

    tp5学习笔记6 1、TP5.0 支持数据库类型1Mysql、SqlServer、PgSQL、Sqlite等数据库的支持。 2、如何连接数据库1、配置文件定义 a、配置文件目录 /var/www/t...

    tp5学习笔记6