配置自动写入时间戳
全局添加更新时间需要在表中新建create_time和update_time字段,配置文件中设置“auto_timestamp"=>true,一般不开启这个功能,否则表中不存在该字段时会报错,真正删除需要把destroy方法或delete方法的第二个参数设置为true
全局添加更新时间需要在表中新建create_time和update_time字段,配置文件中设置“auto_timestamp"=>true,一般不开启这个功能,否则表中不存在该字段时会报错,真正删除需要把destroy方法或delete方法的第二个参数设置为true
use think\Model; use traits\model\SoftDelete; class User extends Model{ use SoftDelete;使用软删除 protected $autoWriteTimestamp = true;//开启自动更新时间 protected $createTime = false;//设置为false代表不使用创建时间 protected $updateTime = "update_at";//设置自定义更新时间的字段 protected $deleteTime = "delete_at";//设置自定义的软删除字段}
$res=User::where('id','=',5)->delete();//此where条件为真删除。,再次删除为0
$res=User::get(5)->delete();//此get为软删除。再次删除报错
//自动时间戳会在插入时候,更新插入时间和更新时间,两个字段;
//自动完成,在插入的时候,只更新插入自动完成一个字段;
获取器:对数据库的数据,进行‘解码’;
修改器:对数据库的数据,进行‘加密’;
自动完成和修改器的区别是:修改器是对传入的数据,进行修改;
自动完成是自动添加/更新数据到某个字段;
自动完成和自动时间戳的功能区别:自动完成可以自己编写return代码,而自动时间戳不用自己编写return代码
软删除引入
traits\model\SoftDelete;
use SoftDelete;
软删除:
首先在模型里面引用SoftDelete
<?php
namespace app\index\model;
use think\Model;
use traits\model\SoftDelete;
class User extends Model{
use SoftDelete;
#删除数据的时候删除时间戳默认写入字段delete_time中,当要自定义时:
// protected $deleteTime = '自定义删除时间字段名';
}
然后在控制器里面执行操作:
public function index(){
// $res = User::destroy(4);//被软删除
// $res = User::get(4);//返回NULL
#查询包含已删除的数据
//$res = User::withTrashed(true)->find(2);
#查询仅包含已删除的数据
$res = User::onlyTrashed()->select();
foreach ($res as $val){
dump($val);
}
#若要恢复被软删除的数据,直接用update方式将delete_time的值设置为NULL即可
#当开启软删除后要想真正彻底删除数据,在destroy的第二个参数后面传入一个true值
$res = User::destroy(1,true);
#通过get方式进行软删除/删除
$res = User::get(3);//如果此处数据已经被软删除则获取到的为NULL,后面的操作无效
$user->delete();//软删除
$res = $user->delete(true);//删除
}
全局添加更新时间需要在表中新建create_time和update_time字段,配置文件中设置“auto_timestamp"=>true,一般不开启这个功能,否则表中不存在该字段时会报错,真正删除需要把destroy方法或delete方法的第二个参数设置为true
123456789 | use think\Model; use traits\model\SoftDelete; class User extends Model{ use SoftDelete;使用软删除 protected $autoWriteTimestamp = true; //开启自动更新时间 protected $createTime = false; //设置为false代表不使用创建时间 protected $updateTime = "update_at" ; //设置自定义更新时间的字段 protected $deleteTime = "delete_at" ; //设置自定义的软删除字段 } |
全局添加更新时间需要在表中新建create_time和update_time字段,配置文件中设置“auto_timestamp"=>true,一般不开启这个功能,否则表中不存在该字段时会报错,真正删除需要把destroy方法或delete方法的第二个参数设置为true
use think\Model; use traits\model\SoftDelete; class User extends Model{ use SoftDelete;使用软删除 protected $autoWriteTimestamp = true;//开启自动更新时间 protected $createTime = false;//设置为false代表不使用创建时间 protected $updateTime = "update_at";//设置自定义更新时间的字段 protected $deleteTime = "delete_at";//设置自定义的软删除字段 }
首先在模型里面引用SoftDe
<?phpnamespace app\index\model;use think\Model;use traits\model\SoftDelete;class User extends Model{ use SoftDelete; #autowritetimestamp表示创建与更新的时间戳都被打开 protected $autoWriteTimestamp = true; #删除数据的时候删除时间戳默认写入字段delete_time中,当要自定义时:// protected $deleteTime = '自定义删除时间字段名';}
protected $autoWriteTimeStamp = true;
protected $createTime = 'create_at';
protected $updateTime = 'update_at';
protected $createTime = false;
protected $updateTime = false;
开启时间戳
创建时间和更新时间
关闭创建时间和更新时间
模型时间戳:参考笔记https://www.imooc.com/notepad/20147e
软删除:参考笔记https://www.imooc.com/notepad/2014a3
软删除:
首先在模型里面引用SoftDelete
<?php
namespace app\index\model;
use think\Model;
use traits\model\SoftDelete;
class User extends Model{
use SoftDelete;
#删除数据的时候删除时间戳默认写入字段delete_time中,当要自定义时:
// protected $deleteTime = '自定义删除时间字段名';
}
然后在控制器里面执行操作:
public function index(){
// $res = User::destroy(4);//被软删除
// $res = User::get(4);//返回NULL
#查询包含已删除的数据
//$res = User::withTrashed(true)->find(2);
#查询仅包含已删除的数据
$res = User::onlyTrashed()->select();
foreach ($res as $val){
dump($val);
}
#若要恢复被软删除的数据,直接用update方式将delete_time的值设置为NULL即可
#当开启软删除后要想真正彻底删除数据,在destroy的第二个参数后面传入一个true值
$res = User::destroy(1,true);
#通过get方式进行软删除/删除
$res = User::get(3);//如果此处数据已经被软删除则获取到的为NULL,后面的操作无效
$user->delete();//软删除
$res = $user->delete(true);//删除
}
thinkphp 提供的自动时间戳 自动记录时间比使用自动完成功能好,减少代码量;
1.修改database.php配置文件中设置'auto_timestamp' 为true (不推荐的方法,此法数据库中所有表要有create_time和update_time这2个字段。)
2.(推荐)在模型的类里添加属性:只对个别数据表字段create_time、update_time自动完成时间戳赋值,可以按如下操作:
protected $autoWriteTimestamp = true;
//在模型中对约定的create_time、update_time自动完成时间戳赋值,如果不用默认的create_time名称,这样设置
protected $createTime = 'create_at';
protected $updateTime = 'update_at';
// 禁用某个时间戳,可以这样设置
//protected $createTime = false; //表示这个创建自动记录时间戳禁用
全局自动写入时间戳字段 'auto_timestamp' => true(不建议开启全局时间戳,如果数据库没有create_time、update_time 字段会报错)
局部自动写入时间戳 'autoWriteTimestamp' = true
如果数据库不是使用 create_time、update_time 字段、则需要自定义修改时间戳字段
protected $createTime = '创建时间字段名';
protected $updateTime = '修改时间字段名';
软删除:
首先在模型里面引用SoftDelete<?php namespace app\index\model; use think\Model; use traits\model\SoftDelete; class User extends Model{ use SoftDelete; #autowritetimestamp表示创建与更新的时间戳都被打开 protected $autoWriteTimestamp = true; #删除数据的时候删除时间戳默认写入字段delete_time中,当要自定义时: // protected $deleteTime = '自定义删除时间字段名'; }
然后在控制器里面执行操作
<?php namespace app\index\controller; use think\Controller; use app\index\model\User; class Index extends Controller { public function index(){ // $res = User::destroy(4);//被软删除 // $res = User::get(2);//返回NULL #查询包含已删除的数据 //$res = User::withTrashed(true)->find(2); #查询仅包含已删除的数据 $res = User::onlyTrashed()->select(); foreach ($res as $val){ dump($val); } #若要恢复被软删除的数据,直接用update方式将delete_time的值设置为NULL即可 #当开启软删除后要想真正彻底删除数据,在destroy的第二个参数后面传入一个true值 $res = User::destroy(1,true); #通过get方式进行软删除/删除 $res = User::get(3);//如果此处数据已经被软删除则获取到的为NULL,后面的操作无效 $user->delete();//软删除 $res = $user->delete(true);//删除 } }
模型时间戳:
<?php namespace app\index\model; use think\Model; class User extends Model{ #autowritetimestamp表示创建与更新的时间戳都被打开 protected $autoWriteTimestamp = true; // #createtime为false表示创建的时间戳被关闭 // protected $createTime = false; // #updatetime为true表示更新时间戳被打开 // protected $updateTime = true; // #创建数据的时候创建时间戳默认写入字段create_time中,当要自定义时: // protected $createTime = '自定义创建时间字段名'; // #更新数据的时候更新时间戳默认写入字段update_time中,当要自定义时: // protected $updateTime = '自定义更新时间字段名'; }