博客列表 >5.24数据库的模型操作,软删除与恢复

5.24数据库的模型操作,软删除与恢复

吃不起土的少年的博客
吃不起土的少年的博客原创
2018年05月30日 18:47:12928浏览

实例

<?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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议