thinkphp5.0学习(八):模型

一、模型(model)

数据模型:比如注册模型,可以给前台使用,也可以给后台使用

二、新建模型

1.手动新建

1.打开前台模块(application\index)新建model目录
2.在model目录下新建文件user.php(与数据表名称一致)


    // 声明命名空间(位置)
    namespace app\index\model;
    // 导入系统的数据模型
    use think\Model;
    class User extends Model
    {

    }
?>

2.命令新建

切换到项目目录
php think make:model app\index\model\Users

3.注意

1.数据模型的名字,建议和数据表名一致
2.如果不一致,可以在模型中设置表名


    // 声明命名空间(位置)
    namespace app\index\model;
    // 导入系统的数据模型
    use think\Model;
    class User extends Model
    {
        // 设置查询的表
        protected $table="user";
    }
?>

3.如果表名中带有”_”(admin_user)模型名称应该是AdminUser

4.controller中获取数据

public function index(){
    // 实例化数据模型
    $user=new \app\index\model\User;
    dump($user::get(3)->toArray());
}

三、模型的实例化

1.使用静态方法

    $data=User::get(3);
    dump($data->toArray());

2.实例化数据模型

    $user=new User();
    $res=$user->get(3);
    dump($res);

3.使用Loader类

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

4.使用助手函数

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

四、查询操作

1.查询单条数据

1.get方法
    // 使用数字
        $res=User::get(1);  //默认查找主键
    // 使用数组
        $res=User::get(["name"=>"甜甜"]);  //自定义查找
    // 使用闭包函数
        $res=User::get(function($query){
            $query->where("id",3);
        });
2.find方法
    $res=User::where("id",3)->find();

2.查询多条数据

// all
    // 所有数据
    $res=User::all();
    // 字符串
    $res=User::all("4,5");
    // 数组
    $res=User::all([5,6,7]);
    // 数组
    $res=User::all(["pass"=>"12"]);
    // 闭包
    $res=User::all(function($query){
        $query->where("pass","123")->whereOr("pass","12")->order("id","desc");
    });
// select 和all类似
    $res=User::select();
    $res=User::select(4);
    $res=User::limit(2)->select();
    foreach ($res as $key => $value) {
        dump($value->toArray());
    }

2.获取某个字段和某列值

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

3.动态查询

// 查询出匹配的第一条数据
            // getBy字段名
            $res=User::getByName('甜甜');
            $res=User::getByPass('12');
            $res=User::getByAge('12');
            dump($res->toArray());

五、增加操作

1.设置属性

// 返回影响行数
$user=new User();
$user->name="wanli";
$user->pass="123";
$user->age="123";
dump($user->save());

2.通过data方法

// 返回影响行数
$user=new User();
$user->data([
    "name"=>"xixi",
    "pass"=>"xixi",
    "age"=>11
]);
dump($user->save());

3.实例化

// 实例化
    $user=new User([
            "name"=>"实例化",
            "pass"=>"shilihua",
            "age"=>20
        ]);
    $user->save();

4.allowField(true)屏蔽数据库中不存在的字段

// allowField(true)屏蔽数据库中不存在的字段
    $user=new User([
            "name"=>"实例化",
            "pass"=>"shilihua",
            "age"=>20,
            "sex"=>123
        ]);
    $user->allowField(true)->save();

5.allowField([“name”,”age”])指定插入数据库的字段

// allowField(true)屏蔽数据库中不存在的字段
    $user=new User([
            "name"=>"实例化",
            "pass"=>"shilihua",
            "age"=>20,
            "sex"=>123
        ]);
    $user->allowField(["name","age"])->save();

6.获取自增id(获取插入数据的id)

$user=new User([
        "name"=>"wanli",
        "age"=>20,
        "pass"=>"wanli",
    ]);
$user->allowField(["name","age","pass"])->save();
echo $user->id;

7.增加多条数据

$user=new User();
$list=[
    ["name"=>"zhangsan","age"=>20,"pass"=>"zhangsan"],
    ["name"=>"lisi","age"=>20,"pass"=>"lisi"]
];
$user->saveAll($list);

8.助手函数

$user=model("User");

9.create方法

$user=User::create([
    "name"=>"lalla",
    "age"=>35,
    "pass"=>"lalla"
]);

六、删除操作

public function delete(){
    $user=User::get(11);
    // 返回影响行数
    dump($user->delete());
    // 删除主键对应的数据
    $user=User::destroy(12);
    // 删除多条数据
    $user=User::destroy("12,13,14");

    // 删除name对应的数据
    $user=User::destroy(["name"=>"tian"]);
    // 删除多个条件
    $user=User::destroy(["name"=>"张三","pass"=>"123"]);
    // 使用闭包
    $user=User::destroy(function($query){
        $query->where("id","<","18");
    });
    // 删除数据
    $user=User::where("id",">","18")->delete();
    dump($user);

}

七、更新操作

public function update(){
    // 设置字段更新数据
        $user=User::get(19);
        $user->age=81;
        $res=$user->save();
        dump($res);
    // 直接数组修改
        $user=new User();
        $res=$user->save([
                "pass"=>"pass",
                "age"=>15,
                "name"=>"pass"
            ],["id"=>19]);
    // 修改数据
        $_POST["name"]="hahha";
        $_POST["pass"]="hahha";
        $_POST["age"]=123;
        $_POST["sex"]="hahha";
        $_POST["id"]=19;

        $user=new User();
        $res=$user->allowField(['name','pass','age'])->save($_POST,["id"=>$_POST["id"]]);
    // 批量更新
        $data=[
            ['id'=>19,'name'=>'abc','pass'=>'1234'],
            ['id'=>18,'name'=>'abc','pass'=>'1234'],
            ['id'=>56,'name'=>'abc','pass'=>'1234'],
        ];
        $user=new User();
        $res=$user->saveAll($data);
    // 更新操作
        $user=new User();
        $res=$user->where("id",">","50")->update(["age"=>50]);
        $res=User::where("id","<","50")->update(["pass"=>"xiaoyu50"]);
    // 闭包更新数据
        $user=new User();
        $user->save(["name"=>"tiantian"],function($query){
            $query->where("id","56");
        });
        dump($res);
}

八、聚合(数据统计)

public function tongji(){
        // 统计数据条数
        $tot=User::count();
        // 条件判断
        $tot=User::where("age",">","50")->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);
    }

九、获取器

1.数据模型

// sex的获取器
    // get+字段+Attr
    public function getSexAttr($val){
        switch ($val) {
            case '0':
                return "未知";
                break;
            case '1':
                return "男";
                break;
            case '2':
                return "女";
                break;
            default:
                # code...
                break;
        }
    }

2.控制器

public function getSex(){
    // 获取id为56的数据
    $user=User::get(56);
    // 经过获取器的操作
    dump($user->toArray());
    dump($user->sex);
    // 不经过获取器的处理
    dump($user->getData());
}

十、修改器

1.数据模型

// 用户密码的修改器
public function setPassAttr($val){
    return md5($val);
}

2.控制器

// 修改器
public function setPass(){
    // 修改id 为56的密码
    $user=new User();
    $res=$user->save(['pass'=>"123"],["id"=>56]);
}

3.注意:修改器的触发条件是save方法

十一、自动完成

1.修改器和自动完成的区别

1.修改器:可以在数据赋值的时候自动进行转换处理(对手动赋值的字段进行转换)
2.自动完成:数据自动完成指在不需要手动赋值的情况下对字段的值进行处理后写入数据库(没有手动赋值的字段进行处理)

2.自动完成

// 无论更新操作还是添加操作都会执行(一般不用)
protected $auto=[];
// 只在插入时赋值
protected $insert=["create_time","user_status"];
// 只在更新时赋值
protected $update=["update_time","user_status"];
protected function setCreateTimeAttr(){
    return time();
}
protected function setUpdateTimeAttr(){
    return time();
}
protected function setUserStatusAttr(){
    return 1;
}

十二、时间戳

1.系统支持自动写入创建和更新时间

1.在datebase.php文件中设置
    // 自动写入时间戳字段
    'auto_timestamp'  => true,
2.在数据模型中设置
    // 设置自动插入时间戳
    protected $autoWriteTimestamp=true;

2.可以设置字段的默认值

//设置创建时间字段
protected $createTime="create_times";
//设置更新时间字段
protected $updateTime="update_times";

3.取消更新时间戳设置

protected $updateTime=false;   

十三、软删除

1.作用:实现假删除,可以进行恢复

2.实现

1.model中


    namespace app\index\model;
    use \think\Model;
    // 配合软删除使用(数据库中需要有delete_time字段)
    use traits\model\SoftDelete;
    class User extends Model
    {
        //使用软删除
        use SoftDelete;
        // 设置删除的时间戳(默认是delete_time)
        protected $deleteTime="delete_times";
    }
?>

2.控制器中

1.软删除数据
    $res=User::destroy(66);
2.获取数据
    $res=User::get(66);
    //软删除 数据库数据存在,但是get获取不到数据
3.真实删除(delete是真实删除)
    //数据库中的数据也会被删除
    1.$res=User::destroy(66,true);
    2.$user=new User();
    $res=$user->where("id","55")->delete();
4.读取所有数据(包含软删除的数据)
    $res=User::withTrashed()->find(65);
    $res=User::withTrashed()->select();
5.仅仅读取软删除数据
    $res=User::onlyTrashed()->select();
    $res=User::onlyTrashed()->find(65);


你可能感兴趣的:(学习笔记,thinkphp5)