【ThinkPHP6.x框架】(13)模型5(JSON、软删除、事件)

本文详细介绍了如何在数据库中处理JSON字段,包括插入、查询、修改和使用模型操作。同时,讲解了模型的软删除功能,以及如何设置和使用数据库和模型的事件监听。通过对数据库操作的理解和事件机制的运用,可以更高效地管理和维护数据。
摘要由CSDN通过智能技术生成

数据库JSON

        数据库写入  JSON字段,直接通过数组的方式即可完成:

$data = [
    'username' => '辉夜', 
    'password' => '123', 
    'gender'   => '女',
    'email'    => 'huiye@163.com',
    'price'    =>  90,
    'details'  => '123',
    'uid'      =>  1011,
    'status'   =>  1,
    'list'     =>     ['username'=>'辉夜', 'gender'=>'女',
                        'email'=>'huiye@163.com'],
];

Db::name('user')->json(['list'])->insert($data);

        如果要查询数据时,正确转换  json数据格式,也需要设置  json方法:

Db::name('user')->json(['list'])->find(278);

        如果要将  json字段里的数据作为查询条件,可以通过如下方式实现:

$user = Db::name('user')->json(['list')->
        where('list->username', '辉夜')->find();

        如果想完全修改  json数据,可以使用如下的方式实现:

$data['list']=['username'=>'李白','gender'=>'男','email'=>'libai@163.com'];
Db::name('user')->json(['list'])
        ->where('id', 278)->update($data);

        如果只想修改  json数据里的某一个项目,可以使用如下的方式实现:

$data['list->username'] = '李黑';
Db::name('user')->json(['list'])
                ->where('id', 278)->update($data);

模型JSON

        想要写入  json  字段的字符字段,需要设置;

protected $json = ['list'];

        使用模型方式去新增包含 json数据的字段。

$user = new UserModel();
$user->username    =  '李白';
$user->password    =  '123';
$user->gender      =  '男';
$user->email       =  'libai@163.com';
$user->price       =  100;
$user->uid         =  1011;
$user->status      =  1;
$user->details     =  123;
$user->list        =  ['username'=>'辉夜', 'gender'=>'女 ','email'=>'huiye@163.com'];
$user->save();

        也可以通过对象的方式,进行对  json字段的写入操作。

$list = new \StdClass();
$list->username    =  '辉夜'; 
$list->gender      =  '女';
$list->email       =  'huiye@163.com'; 
$list->uid         =  1011;
$user->list        =  $list;

        通过对象调用方式,直接获取  json里面的数据。

$user = UserModel::find(278);
return $user->list->username;

        通过  json的数据查询,获取一条数据。

$user = UserModel::where('list->username', '辉夜')->find(); 
return $user->list->email;

        更新修改 json数据,直接通过对象方式即可;

$user = UserModel::find(278);
$user->list->username =   '李白'; 
$user->save();

模型的软删除

        在模型端设置软删除的功能,引入SoftDelete,它是trait,$deleteTime指定软删除的标志字段;

use SoftDelete;
protected $deleteTime = 'delete_time';

        delete_time默认我们设置的是  null,如果你想更改这个默认值,可以设置:

//protected $defaultSoftDelete = 0;

        软删除和方法如下,包括  destroy()和  delete():

UserModel::destroy(289);
UserModel::find(287)->delete();

        默认情况下,开启了软删除功能的查询,模型会自动屏蔽被软删除的数据;

$user = UserModel::select();
return json($user);

        在开启软删除功能的前提下,使用  withTrashed()方法取消屏蔽软删除的数据。

$user = UserModel::withTrashed()->select();
return json($user);

        如果只想查询被软删除的数据,使用  onlyTrashed()方法即可。

$user = UserModel::onlyTrashed()->select();
return json($user);

        如果想让某一条被软删除的数据恢复到正常数据,可以使用  restore()方法。

$user = UserModel::onlyTrashed()->find();
$user->restore();

        如果想让一条软删除的数据真正删除,在恢复正常后,使用  force()和  delete();

$user = UserModel::onlyTrashed()->find(193);
$user->restore();
$user->force()->delete();   //或  UserModel::destroy(288, true)

事件

数据库的事件

        当你执行增删改查的时候,可以触发一些事件来执行额外的操作。这些额外的操作事件,可以部署在构造方法里等待激活执行。数据库事件方法为  Db::event('事件名', '执行函数'),具体事件名如下:

         数据库事件只支持:find、select、update、delete、insert这几个方法。在控制器端,事件一般可以写在初始化方法里,方便统一管理。

public function initialize()
{
    Db::event('before_select', function ($query) { 
    echo '执行了批量查询操作!';
});
    Db::event('after_update', function ($query) { 
    echo '执行了修改操作!';
}); }

模型事件

        支持的事件类型更加的丰富,具体如下:

         在模型端使用静态方法调用即可完成事件触发:

protected static function onAfterRead($query) {
    echo '执行了查询方法'; 
}
protected static function onBeforeUpdate($query) {
    echo '准备修改中...'; 
}
protected static function onAfterUpdate($query) {
    echo '修改完毕...'; 
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值