数据库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 '修改完毕...';
}