thinkphp中编辑时使用cache的一些注意坑点
在做系统日志的时候,我想要对比编辑前和编辑后的数据,存在的差异性的时候,发现一些问题。在此记录一下:
$info = User::find(1);
$data = [
'id' => 1,
'username' => 'zhangsan' . rand(0, 999),
'create_time' => time()
];
$info->cache('user')->data($data)->save();
print_r($info->getData());
echo "<hr />";
print_r($data); // // $info与$data相同
上述代码中,打印出的$info和$data数据是一致的,因此如果要获取编辑前后的差异,就需要在执行save编辑之前进行获取。但是我发现,我之前的项目中,在最后一部获取也是没问题的(使用了cache),做了些测试,发现如下一些问题,简单记录一下:
在thinkphp中,官方推荐编辑数据的方式是先查询,然后修改,如下代码:
$info = User::find(1);
$data = [
'username' => 'zhangsan' . rand(0, 999),
'create_time' => time()
];
$res = $info->data($data)->save();
在实际项目中,我们也一般都是这样处理的,但是当我们使用了数据缓存的方式时,会出现一些小小的坑点,需要注意一下,如下代码:
$info = User::find(1);
$data = [
'username' => 'zhangsan' . rand(0, 999),
'create_time' => time()
];
$res = $info->cache('user')->data($data)->save();
执行上述代码,实现的效果将不再是更新,而是新增,这个有点略微的和常识不符,但是在项目中,也是这样写的,却是可以正常编辑的,查看原因,发现问题出在项目中表单提交的data数据中,都添加了id属性,即,如下代码,可以正常执行编辑:
$info = User::find(1);
$data = [
'id' => 1, // 存在id数据项
'username' => 'zhangsan' . rand(0, 999),
'create_time' => time()
];
$res = $info->cache('user')->data($data)->save();
print_r($info->getData());
echo "<hr />";
print_r($data); // $info与$data不同
综合上述代码,可以得出如下几个结论:
1、不使用cache的情况下,打印编辑前后的数据,数据一致;在使用cache的情况下,打印编辑前后的数据,数据是不相同的。因此,妥善期间,获取数据之间的差异,需要在执行编辑操作之前进行。
2、不使用cache的情况下,$info->save($data)执行的是编辑,而在使用了cache的情况下,当数据中不存在id项时,$info->save($data)执行的是新增,存在id数据项时,$info->save($data)执行的是编辑操作。
- CSS颜色函数--rgb()、rgba()的语法和使用
rgb()函数和rgba()函数是前端切图工作当中经常用到的颜色函数,根据光学三原色红(red)、绿(green)、蓝(blue)三种颜色的不同分量进行混合后来
- CSS最大值计算函数--max()函数的定义和使用
max()函数的作用是从一系列用逗号分割的参数中选取最大的一个,作为属性值,参数可以是直接数值,字面量、数学表达式、css函数等,支持嵌套。与min()函数的作
- 后台发布文章时自动保存草稿功能的实现
“正在系统后台编辑文章,顺手看了下群里的视频,关视频的时候不小心连网页一起关闭了,写了大半的文章说没就没了?”,相信很多人都遇到过这种场景,辛辛苦苦码了半天的字
- CSS获取属性值函数--attr()函数的定义和使用
attr()函数为CSS返回元素属性值函数一、attr()函数的语法:该函数接收一个单一参数:attribute-name,即属性名,attr()函数返回被选择
- 富文本编辑器CKEditor5接入指南
在后端制作CMS等需要用到富文本编辑器的时候,经常会陷入选择困难症,众所周知,目前市面上的富文本编辑器大概有数十种,比如百度的ueditor、TinyMCE、w
- WebStorm中如何配置SCSS
WebStorm是一款很优秀的用于前端开发的IDE,用于开发基于HTML、CSS、JS等的应用时非常应手,当然JetBrains旗下的其他IDE,如PHPSto
- CSS颜色函数--rgb()、rgba()的语法和使用
rgb()函数和rgba()函数是前端切图工作当中经常用到的颜色函数,根据光学三原色红(red)、绿(green)、蓝(blue)三种颜色的不同分量进行混合后来
- CSS限定属性值函数--clamp()函数的语法和使用
clamp()的作用是将属性值限制在最大、最小值之间,当值介于最大最小值范围中时,则使用给定的首选值。一、clamp()函数的语法clamp(MIN, VAL,