ThinkPHP5——模型操作(主要针对模型类)

新建模型

  • 手动新建
    a. 打开前端模块(如D:\htdocs\tp5\application\index)
    新建model文件夹
    b. 在model文件夹下新建User.php
     namespace app\index\model;
     //导入系统的数据模型
     use think\Model;
     //声明Uset模型
     class User extends Model{

     }
  • dos命令新建
    a.打开cmd,切换到项目目录
    输入 php think make:model app\index\model\Users.php

模型的实例化

查询操作

1.调用静态方法

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

2.实例化模型

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

查询操作

1.查询单条数据

//get方法
//默认找主键
$res = User::get(1);
//默认查找用户名
$res = User::get(["name"=>"wjc"]);

2.查询多条数据

//默认查询所有数据
$res = User::all();
//字符串
$res = User::all("1, 24, 25");
//数组
 $res = User::all([1, 24, 25]);
//数组
 $res = User::all(["pass"=>"123"]);

3.获取某个字段某列值

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

4.动态查询

//查询匹配到的第一条数据
//getBy字段名
$res = User::getByName("wjc");
$res = User::getByPass("444");

增加操作

1.设置对象属性

$user = new User();
//设置相应的列的值
 $user->name = "wjc1";
$user->pass = "abc";
$user->age = 18;
dump($user->save());

2.通过data方法

$user ->data([
          "name"=>"wjc2",
          "pass"=>110,
          "age"=>19
        ]);
dump($user->save());

3.实例化(并设置过滤错误字段)

$user = new User([
           "name"=>"fh",
           "pass"=>"123",
           "age"=>20,
           "sex"=>"1"
         ]);
//通过allowField(true)反复剔除错误字段
 dump($user->allowField(true)->save());
//指定插入数据库字段
 $user->allowField(["name", "age"])->save()

4.增加多条数据

 $user = new User();
         $list = [
           ["name"=>"wjc5",  "pass"=>123, "age"=>20],
           ["name"=>"wjc6",  "pass"=>123, "age"=>20],
           ["name"=>"wjc7",  "pass"=>123, "age"=>20]
         ];
$user->saveAll($list);

5.create方法增加数据

$user = User::create([
           "name"=>"wjc7",
           "age"=>18
         ]);

删除操作

1.删除单条数据

$user = User::destroy(24);

2.删除多条数据

$user = User::destroy("33, 34, 35");

3.删除特定数据

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

4.多条件删除

$user = User::destroy(["name"=>"wjc6", "pass"=>123]);

5.删除区间范围内数据

$user = User::where("id", ">", "43")->where("id", "<", "47")->delete();

修改操作

1.通过save方法修改

$user = new User;
$res = $user->save(
     [
       "pass"=>"adsahiu",
       "age"=>18
     ],[
       "id"=>43
     ]
   );

注:第一个参数是修改的值,第二个参数是修改数据的条件!

2.通过saveAll()方法批量更新数据

 $data = [
     ["id"=>43, "name"=>"abc", "pass"=>123],
     ["id"=>47, "name"=>"abc", "pass"=>123]
   ];
$user = new User;
$res = $user->saveAll($data);

3.通过update方法实现更新数据

$user = new User;
$res = $user->where("id", ">", "17")->update(["age"=>18]);
$res = User::where("id", "<", "58")->update(["pass"=>123]);

聚合

1.count方法进行计数

$total = User::count();
dump($total);

2.对特定数据进行计数

$total = User::where("age", ">", 18)->count();

3.统计最大值

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

4.平均值

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

5.求和

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

获取器

1.控制器代码

$user = User::get(48);
dump($user->toArray());

2.数据模型中编写相应字段方法,对查询的数据字段进行判断修饰返回结果。

public function getSexAttr($val){
      switch($val){
        case '0':
          return "未知";
          break;

        case '1':
          return "男";
          break;

        case '2':
          return "女";
          break;
        default:
          break;
      }
    }

修改器

1.控制器

//必须使用save方法触发
$user = new User;
$res = $user->save(["pass"=>"456"], ["id"=>43]);

注:一定要使用save方法才能触发修改器!

2.数据模型编写相应的修改操作代码

public function setPassAttr($val){
      return md5($val);
    }

自动完成

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

1.控制器代码

//实例化Use数据模型
$user = new User();
//插入数据
$res = $user->save(["name"=>"wjc", "pass"=>555]);
dump($res);

2.数据模型代码

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


      //设置自动完成
      //无论更新操作和添加操作都会执行
      protected $auto=["user_status", "time"];
      //书写自动完成
      protected function setTimeAttr(){
        return time();
      }
      protected function setUserStatusAttr(){
        return 1;
      }

软删除

作用:即实现假删除,数据仍在数据库表中,不过会打上标识表示这条数据应被删除。(可进行删除)
1.实现(即在模型中导入softdelete类然后在方法中写use SoftDelete)

namespace app\index\model;
    //导入系统的数据模型
    use think\Model;
    //声明Uset模型
    use traits\model\SoftDelete;
    class User extends Model{
     use SoftDelete;
     //设置删除的时间戳
     //当设置字段与系统所要求的字段不一致时,可以手动设置
     // protected $deleteTime = "delete_times";
     }

2.控制器
1)删除数据

// $res = User::destroy(59);

2).获取数据

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

3)直接删除

//直接删除数据
$res = User::destroy(43,true);
//使用delelte直接删除,软删除只能用destroy
$user = new User();
$res = $user->where("id", 55)->delete();

4)读取软删除数据

//读取软删除数据
//获取一条软删除数据(也可以读取不是软删除数据)
$res = User::withTrashed()->find(59);
//获取全部数据,包括软删除数据
$res = User::withTrashed()->select();
dump($res->toArray());
//只读取软删除数据
$res = User::onlyTrashed()->select();
dump($res);

猜你喜欢

转载自blog.csdn.net/qq_42049445/article/details/85807115