php

thinkphp模型

2023-05-04

1.  模型操作 

        php think make:model  模块名/模型名(首字母大写)

            

        # 非必须

        protected  $pk = 'id';             # 设置主键名称

        protected  $table = 'think_user';   #设置当前模型对应的完整数据表名称


        // 模型实例化

        //$model = new Student();

         $model = model('student');


  1.1  添加数据

         $data = $request->post();


     ## 添加方案一:

        $model = new Student();

        // 方式一:直接保存

        $ret = $model->save($data);

        // 方式二:过滤保存部分字段

        $ret = $model->allowField(['title','name'])->save($data);

        

      ## 添加方案二:

        $ret = Student::create($data);


 1.2  更新数据

         User::where('id',1)->update(['name'=>'thinkphp']);


1.3   删除数据

          // 方式一:

        $model = Student::find(217); 或 $model=Student::get(217);

        $ret = $model->delete();


        // 方式二 : 静态方法

        $ret = Student::destroy(217);

        // 删除多条

        $ret = Student::destroy([1,2,3]);


6.4   软删除

            use think\model\concern\SoftDelete

            # mode类里面 引入:

            use SoftDelete;

            // 删除的字段名

            protected $deleteTime = 'delete_time';

                

           # 操作方法

             // 软删除

           $ret = Student::destroy(217);

            // 真删除

           $ret = Student::destroy(217,true);

            

     6.5   trait 解决多继承   php5.4    

     6.6  模型查询数据

             //get直接查询,不可以带 where 条件; find 两者都可以,推荐


       $ret = Student::get(217);

         $ret = Student::find(217);     ## 推荐使用 find

         $ret = Student::where('id',217)->find();  #这种只能使用find


         // 条件分组 where() or ()

            

        //查询

        $ret = Student::where('title','我是张三')->select();

        // 动态查询 getBy固定+ 字段名(首字母大写)

        $ret = Student::getByTitle('我是张三');


     6.7 获取器 对原始数据自动处理


          // 方式一

        $ret = Student::withAttr('title',function($value,$data){

            return 'hello world'.$value

        })->where('id','>',5)->select();


        // 方式二 (在model 里面设置)-- 获取器 get字段名Attr,如果有下划线,下划线的首字母大写

public function getCreateTimeAttr($value){

    return date('Y年m月d日 H时i分s秒',strtotime($value));

}  


<?php 

namespace app\common\model;

use think\Model;

class Student extends Model{

    # 非必须

    protected  $pk = 'id';             # 设置主键名称

    protected  $table = 'student';   #设置当前模型对应的完整数据表名称

 

public function aa(){

    return 'aab';

}

}


<?php

namespace app\index\controller;

use think\Controller;

// 引入模型

use app\common\model\Student;

 

use think\Request;

 

 

class Students extends Controller{

    public function demo(){

        echo '测试';

    }

 

    // 展示页面

    public function page(){

        return view('index@student/add');

    }

 

    // 通过 post传参,保存数据

    public function add(Request $request){

        // 模型实例化

        //$student = new Student();

        $student = model('student');

        $value = $request->post();

        // ---- 方法一 --------- 返回true

        // 保留全部字段

        $ret = $student->save($value);

        // 过滤保存部分字段

        //$ret = $student->allowField(['name','number'])->save($value);

        // ---- 方法二 ------- 返回插入的数据

        $ret = Student::create($value);

        dump($ret);

    }

 

     //更新数据

    public function upd(){

        $data = ['content'=>'这条是更新数据'];

        $ret = Student::where('id',22)->update($data);

        dump($ret);

    }

 

    //删除数据

    public function del(){

        // 方式一:

        // $model = Student::find(23);

        // $model = Student::get(23);

        // $ret = $model->delete();

 

        // 方式二 静态方法

        $ret = Student::destroy(22);

        $ret = Student::destroy([1,2,3]);

        dump($ret);

        

    }

 

    // 软删除 -- 在 model引入SoftDelete后,可进行软删除

    public function delr(){

        $ret = Student::destroy(20);

        dump($ret);

    }

 

    // 模型查询数据  get直接查询,不可以带 where 条件; find 两者都可以,推荐

    public function sele(){

        // $ret = Student::get(19);

        // $ret = Student::find(19);

        // $ret = Student::where('id',19)->find();

 

        // 条件分组 where() or ()

         

        //查询字段

        // $ret = Student::where('name','张三')->select();

        // 动态查询 getBy固定+ 字段名(首字母大写)

        $ret = Student::getByName('张三');

 

        dump($ret);

    }

 

    // 获取器 对原始数据自动处理

    public function getAll(){

        $ret = Student::withAttr('name',function($value,$data){

            return '你是最美的'.$value;

        })->where('id',19)->select();

 

        dump($ret);

    }

}