• TP5之model


    • 使用model 查询数据,添加数据,修改数据,删除数据
    • 聚合操作
    • 获取器,修改器
    • 自动添加时间戳(创建时间,修改时间)
    • 软删除

    1、使用model查询数据

     1 $res = User::get(1);  //获取主键为1的数据,得到的是一个对象
     2 
     3 $res = $res->toArray();  //将对象转化为数组
     4 
     5 dump($res->name);  //获取 $res 里 name 字段的值
     6 //使用闭包函数查询 id=1 的记录
     7 $res = User::get(function($query){
     8     $query->where("id","eq",1)
     9           ->field('name')
    10 });
    11 $res = User::where("id",10)->value('name');
    12 $res = User::where("id",10)->field('name')->find();
    13 
    14 $res = User::column('email');               //查询所有的 email 字段值       
    15 $res = User::where("id",">",5)->select();   //查询所有id大于5的记录
    16 $res = User::all('1,2'); //查询主键等于 1 或2 的记录
    17 foreach($res as $val)   //转化为数组
    18 {
    19     dump($val->toArray());
    20 }
    21 //使用闭包函数查询 id<5 的记录
    22 $res = User::get(function($query){
    23     $query->where("id","<",5)
    24           ->field('name')
    25 });

    2、使用model添加数据

     1 $res = User::create([
     2     'name' => 'yulong',
     3     'pwd'  => '123'
     4 ],true);                 //第二个参数为true时,只添加数据表中已有的字段,不报错,不写则默认为false;;;true 也可以换成一个数组,数组里存放数据表中的字段,表示仅允许数组中的字段添加数据
     5 $res->id;  //本次添加的自增id
     6 dump($res);
     7 $usermodel = new User;
     8 $res = $usermodel
     9     ->allowField(true)  //仅允许添加数据表中存在的字段,也可以写成数组
    10     ->save([
    11         'name' => 'yulong',
    12         'pwd'  => '123'
    13     ]);
    14 
    15 dump($res->id);  //获取新添加数据的自增id
    16 $usermodel = new User;
    17 $res = $usermodel->saveAll([   //一次保存多条数据
    18     'name' => 'yulong001',
    19     'name' => 'yulong002'
    20 ]);
    21 
    22 dump($ers);

    3、使用model更新数据

     1 $res = User::update([
     2     'name' => 'yulong002'
     3 ],['id'=>1]);                //更新 id=1 的记录
     4 
     5  $res = User::update([
     6     'name' => 'yulong002'
     7 ],function(){
     8     $query->where("id","LT",5);   //使用闭包函数更新 id<5 的记录
     9 }); 
    10 
    11 
    12 dump($res);
    13 $res = User::where("id","<",6)      //返回值是被更新数据的行数
    14         ->update([
    15               'name' => 'hahahaha'
    16            ]);

    4、使用model删除数据

     1 $res = User::destriy(1);   //删除主键为1的记录,返回影响数据的行数,也可以传递数组
     2 
     3  
     4 $usermodel = User::get(1);
     5 $res       = $usermodel->delete();
     6 
     7 
     8 $res = User::where("id",5)->delete();  // where() 里面有三个参数, 字段值,条件,数值
     9 
    10 dump($res);

    5、使用model聚合操作

    1 $res = User::where("id",">",5)->count();  //查询id大于5的记录条数
    2 
    3 // max 可以换成其他的 如 min / sum / avg
    4 $res = User::max('num');                  //查询 num 字段中的最大值
    5 $res = User::where("id","<",5)->max('num');  //id<5 的记录中的 num 最大值

    6、使用模型获取器

     1 //model  
     2 //方法名:  get字段名Attr
     3 //controller中获取原始数据使用  $res->getData()
     4 
     5 public function getSexSttr($val){
     6     switch($val){
     7         case '1':
     8             return "男";
     9             break;
    10         case '2';
    11             return '女';
    12             break;
    13         default:
    14             return '未知';
    15             break;
    16     }
    17 }

    7、使用模型修改器

     1 //model  修改器命名 set字段名Attr
     2 //修改器作用:在往数据库添加字段时,控制器中写未处理的数据,在模型中的修改器中写处理数据的方法,这样添加到数据库中的数据就是处理过得数据了
     3 public function setPwdAttr($val){
     4     return md5($val);
     5 }
     6 
     7 
     8 // $val代表 pwd 字段,$data代表接收到的所有数据 ,返回的值就是 pwd+email 
     9 public function setPwdAttr($val,$data){
    10     return $val.$data['email'];
    11 }

    8、自动往数据库中添加时间戳

     1 //自动往 time 字段中加入时间戳
     2 public function setTimeAttr(){
     3     return time();
     4 }
     5 
     6 //在数据添加时发生改变
     7 protected $insert = [ 'time_insert' ]; //设置字段
     8 public function setTimeInsertAttr(){   //将字段值设置为当前时间
     9     return time();
    10 }
    11 
    12 //在更新数据时发生改变
    13 protected $update = [ 'time_update' ]; //设置字段
    14 public function setTimeUpdateAttr(){   //将字段值设置为当前时间
    15     return time();
    16 }

    9、model时间戳

    1 // 数据库中的字段  create_time  update_time
    2 // database.php 中更改配置  'auto_timeStamp' => true
    3 // 不推荐使用此方法,因为如果你的数据库表中没有 对应的字段 ,程序可能就会报错
    4 // 可以单独在 某个模型中 添加属性  
    5 
    6 protected $autoWriteTimeStamp = true;  //开启自动加入时间戳
    7  
    8 protected $createTime = 'create_at';   //设置 创建的时候写入 的字段 ,值可以为false,关闭操作
    9 protedted $updateTime = 'update_at';   //设置 创建和更新的时候写入 的字段 ,值可以为false,关闭操作

    10、软删除

     1 // model
     2 // 数据表中的字段 delete_time,默认值可以为 null
     3 
     4 use traitsmodelSoftDelete;  //使用软删除的类
     5 
     6 class User extends Model
     7 {
     8     use SoftDelete;           //在类的开头 use SoftDelete; 
     9     protected $deleteTime = 'delete_at';   //设置软删除的字段,默认为 delete_time
    10 }
    11 
    12 
    13 $res = User::destroy(3,true);  //删除主键为3的记录,第二个参数为 true 时,不是软删除,是tm真删了
    14 
    15 $ress = User::get(4);
    16 $res = $ress->delete(true);  // delete() 没值时,为软删除;值为true,tm的真删
    17 
    18 // controller 获取到 软删除 的记录
    19 $res = User::withTrashed(true)->find(1);  //得到id为1 的经过软删除 删除的记录
    20 dump($res->getData());  //获取原始数据
    21 
    22 $res = User::onlyTrashed()->select();  //获取所有软删除的数据

     over!over!over!

    let the world have no hard-to-write code ^-^
  • 相关阅读:
    C#调用Matlab程序
    一台电脑,内外网同时使用
    django 表反查
    django 反查
    登录注册
    django forms自带form表单
    django url 中name
    关于django无法加载静态css、js的情况
    django static
    django models,views,urls,settings
  • 原文地址:https://www.cnblogs.com/ovim/p/10580319.html
Copyright © 2020-2023  润新知