博主信息
博文 46
粉丝 3
评论 1
访问量 40829
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
5.24数据库的模型操作,软删除与恢复
吃不起土的少年的博客
原创
1095人浏览过

实例

<?php
namespace app\index\Controller;
use think\Controller;
use app\index\model\Staff as StaffModel;

class staff extends Controller
{
  //新增
  public function instance(staffModel $staff)
  {
    $staff->name ='詹姆斯';
    $staff->sex =0;
    $staff->age =35;
    $staff->salary =12538;
    $staff->save();
    return '新增成功,id='.$staff->staff_id;

  }

  public function query()
  {
    // 单条记录查询
    $staff =StaffModel::get(15);
    dump($staff);
echo '<hr>';
    //用闭包方式查询条件复杂的记录
    $staff =StaffModel::get(function($query){
      $query->where('sex','=',1)->where('salary','<',10000);
    });

    dump($staff);
echo '<hr>';
    //多条记录查询
    $staffs= StaffModel::all();
    dump($staffs);

    echo '<hr>';
    //返回主键为6 11 ,14的数据
    $staffs =StaffModel::all([6,11,14]);
    dump($staffs);
  echo '<hr>';
  //all()也支持闭包查询
 $staffs=StaffModel::all(function ($query){
   $query->where('age','>',50)->where('salary','>',5000);
 });
    dump($staffs);

    echo'<hr>';
    //all()返回的数组 同时也可以用foreach来进行遍历

    foreach ($staffs as $key ) {
      echo'姓名:'.$key->name.'<br>';
        echo'性别:'.$key->sex.'<br>';
          echo'工资:'.$key->salary.'元'.'<hr style="color:red">';
    }
echo "<hr>";
    //使用闭包查询 同时支持查询变量从外部传入
    //例如 查询条件由用户通过URL提供
    $sex =$this->request->param('sex')?:0;
    $salary =$this->request->param('salary')?:2938;

    $staffs =StaffModel::all(function($query) use ($sex,$salary){
      $query->where('sex','=',$sex)->where('salary','>=',$salary);
    });

    foreach ($staffs as $key ) {
      echo'姓名:'.$key->name.'<br>';
        echo'性别:'.$key->sex.'<br>';
          echo'工资:'.$key->salary.'元'.'<hr style="color:red">';
    }

  }

  //模型更新
  public function update()
  {
    //更新基于查询
    $staff=StaffModel::get(14);
    $staff->name='kim';
    $staff->save();
    //使用静态方法来更新数据
    StaffModel::update(
      ['name'=>'杰克'],
      ['staff_id'=>'14']
    );
    StaffModel::update(
      ['salary'=>\think\Db::raw('salary+1000')],
      function($query){
        $query->where('age','<',30);}

      );
      //也可以用查询构造器来更新数据
      StaffModel::where('age','>',50)
                 ->data(['salary'=> \think\Db::raw('salary+500')])
                 ->update();
  }
  //模型 添加数据
  public function create()
  {
    $data =[
      'name'=>'约翰逊',
      'sex'=>1,
      'age'=>24,
      'salary'=>6871
    ];

    $field=['name','sex','age','salary'];

  //   StaffModel::create($data,$field);
  // //使用查询构造器添加


  }
//删除操作
  public function delete()
  {
    StaffModel::destroy(14);
    StaffModel::destroy([14,15,18]);//支持多键
    //闭包查询 删除
    StaffModel::destroy(function ($query){
      $query->where('age','=',58)->where('salary','>',15000);
    })  ;

    //用查询构造器 删除
    StaffModel::where('age','<',10)
                 ->delete();
  }

  public function softDelete()
  {
    StaffModel::destroy(14);
   //被删除的记录 无法通过普通方法查到
    $staff=StaffModel::where('staff_id','=',14)->select();
    //查询被软删除的数据
    $staff=StaffModel::withTrashed()->where('staff_id','=',14)->select();

    //从回收站查询并恢复软删除数据
    $staff =StaffModel::onlyTrashed()->where('staff_id','=',14)->find();
    $staff->restore();
    $staff=StaffModel::where('staff_id','=',14)->select();
    dump($staff);
  }
}
 ?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

软删除的步骤

  1. 在模型中导入model/concern/SoftDelete 以导入其中的trait方法集

  2. 在数据表中新增delete_time字段(可自行定义,与之相匹配即可)

  3. 在相应模型中设置模型属性 protected $deleteTime = '删除时间字段名';

  4. 在类中调用softDelete;

  5. 在控制器中创建同名方法 即可使用。

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学