php中如何实现逻辑删除,手残党的免死金牌:为Typecho增加逻辑删除功能
手残党的免死金牌:为Typecho增加逻辑删除功能
夜月归途 • 2020 年 05 月 31 日
这次是要对Typecho动刀子了,主要是为了解决误删问题。我个人对数据的存储是非常没有安全感的,特别是重要数据,我会做各种保护措施多重备份,防止出现数据丢失。
Typecho中的删除都是物理删除,虽然我会定期对整站进行备份,但误删这种事尽管你再怎么小心翼翼它都有概率会发生在你身上。如果你有良好的备份习惯倒还好,一旦你没有备份或者刚巧没有来得及备份最新版的数据那可就无力回天了。所以对于物理删除我是非常谨慎的,这次既然打算折腾那么就一次做到底,为Typecho添加逻辑删除功能。
修改之前先捋一捋Typecho的表结构及其关联关系,一共7张表,算是比较简洁了。很多内容都做了抽象处理,比如文章、页面、链接和文件等都被抽象为内容,分类和标签被抽象为项目。详细结构如下:tabledescriptiontypecho_comments评论表,所有文章/页面的评论内容
typecho_contents内容表,包括文章、草稿、页面、链接、文件等类型
typecho_fields字段表,主要为内容中的自定义字段,与内容id关联
typecho_metas项目表,分类、标签、链接等
typecho_options配置表,网站的所有配置,以及插件的配置
typecho_relationships关系表,内容和项目的关联关系,如文章-标签
typecho_users用户表,网站所有的用户
重要的数据无非就是内容和评论,那么仅需要为这两张表增加逻辑删除即可。先对两张表进行修改,增加逻辑删除字段:ALTER TABLE `typecho_contents`
ADD COLUMN `del_flag` tinyint(4) NOT NULL DEFAULT 0 AFTER `parent`;
ALTER TABLE `typecho_comments`
ADD COLUMN `del_flag` tinyint(4) NOT NULL DEFAULT 0 AFTER `parent`;
接着修改相关的PHP函数,先是Query.php文件,原有的物理删除函数保持不变,拓展一个逻辑删除函数,修改执行操作为UPDATE。/**
* 删除记录操作(DELETE)
*
* @param string $table 需要删除记录的表
* @return Typecho_Db_Query
*/
public function delete($table){
$this->_sqlPreBuild['action'] = Typecho_Db::DELETE;
$this->_sqlPreBuild['table'] = $this->filterPrefix($table);
return $this;
}
/**
* 逻辑删除记录操作(DELETE)
*
* @param string $table 需要删除记录的表
* @return Typecho_Db_Query
*/
public function logicDelete($table) {
$this->_sqlPreBuild['action'] = Typecho_Db::UPDATE;
$this->_sqlPreBuild['table'] = $this->filterPrefix($table);
return $this;
}
接着需要将内容和评论两处的删除修改为逻辑删除函数,追加update字段参数,下为内容表的逻辑(评论表同理):/**
* 删除内容
*
* @access public
* @param Typecho_Db_Query $condition 查询对象
* @return integer
*/
public function delete(Typecho_Db_Query $condition){
return $this->db->query($condition->logicDelete('table.contents')
->rows(array("del_flag" => 1)));
}
另外还有几处删除内容的时候,会关联删除内容下所有的评论,如Post/Edit.php文件中的deletePost()函数中的这段:/** 删除评论 */
$this->db->query($this->db->delete('table.comments')
->where('cid = ?', $post));
// 此处需要修改为逻辑删除
$this->db->query($this->db->update('table.comments')
->where('cid = ?', $post)->rows(array("del_flag" => 1)));
这样的地方一共有三处,注意同步修改。(后面在使用过程中发现有多处,注意查找)
接着就是修改查询逻辑了,需要增加逻辑删除字段筛选,以评论举例(内容同理):/**
* 获取查询对象
*
* @access public
* @return Typecho_Db_Query
*/
public function select(){
return $this->db->select('table.comments.coid ... more field ...')
->from('table.comments')->where("del_flag = ?", 0);
}
文章管理页有一个显示草稿数量的地方也需要修改:/**
* 获取草稿文章数目
*
* @access protected
* @return integer
*/
protected function ___draftPostsNum(){
return $this->db->fetchObject($this->db->select(array('COUNT(cid)' => 'num'))
->from('table.contents')
->where('table.contents.type = ?', 'post_draft')
// 查询草稿数量添加删除标记逻辑
->where('del_flag = ?', 0))->num;
}
如此大功告成,内容和评论两张表的逻辑删除就加上了,以后再也不怕误删数据了。
php中如何实现逻辑删除,手残党的免死金牌:为Typecho增加逻辑删除功能相关推荐
- linux将用户删除文件,linux 用户配制文件 用户增加及删除 以及用户属于的更改...
1.用户密码文件 /etc/passwd root : x : 0 : 0 : root : /root : / ...
- html 右上角删除图标,html+css制作div标签增加右上角删除图标的示例代码_CSS
一.需求描述 在Div标签的右上角显示删除图标 二.实现方式 html.CSS 三.参考代码 .container{ width:60px; height:60px; border: 1px dott ...
- 一级计算机基础演示文稿,计算机一级计算机基础及MSOffice应用辅导:在演示文稿中增加和删除幻灯片...
在演示文稿中增加和删除幻灯片 通常,演示文稿由多张幻灯片组成,创建空白演示文稿时,自动生成一张空白幻灯片,当一张幻灯片编辑完成后,还需要继续制作下一张幻灯片,此时需要增加新幻灯片.在已经存在的演示文稿 ...
- 计算机一级考试ppt知识点,2020年计算机一级MsOffice考试考点解析:增加和删除幻灯片...
[导语]2020年计算机一级考试备考模式已开启,为了方便考生及时有效的备考,下面无忧考网为您精心整理了2020年计算机一级MsOffice考试考点解析:增加和删除幻灯片,供大家的关注.如想获取更多计算 ...
- 软件测试教程编发中长发,真人教程︱短发、中发、长发的六款速成编发,手残党五分钟就能搞定!...
原标题:真人教程︱短发.中发.长发的六款速成编发,手残党五分钟就能搞定! 大家好,我是安哥拉·兔. 我之前说过吧,我跟狗哥在家互相剪头发,结果一发不可收拾,我的头发就越来越短了,但我还蛮喜欢现在这样子 ...
- 微信又一期待已久的功能上线:是手残党的福音了
不少朋友们肯定遇到过这样情况,发错信息,想要撤回却误点了删除(单方面),对方已收到你所发的信息,你想撤回也没办法了.不合时宜的消息已发送,自己只能尴尬的抠脚. 不过,最新版本的微信将化解这一尴尬局面. ...
- 惠普g260鼠标宏软件_黑爵电竞鼠标AJ337 电竞手残党福音 鼠标宏一键火力全开
2020年,可以说是英特尔最难受的一年,多年来的挤牙膏大法也不灵了,面对AMD更先进的7mm制程以及更多的线程数,加上本身更合理的售价,说实话就连一向占据处理器半壁江山的英特尔也感受到了很高的威胁.A ...
- 元气骑士超级计算机有什么用,元气骑士三持技巧分享,手残党的福利轻松过关...
在元气骑士中骑士依靠双持以至三持兵器的厉害技能,成了全部职业中输出最大的职业之一.这次小编带来的元气骑士三持技巧分享一定可以让玩家们进一步提升自己的实力,在闯关的时候更加轻松一些,话不多说,咱直入正题 ...
- 怎么恢复删除的微信聊天记录?手残党终于有救了
随着互联网的发展,手机对于我们越来越重要,如今我们支付也基本利用微信或者是支付宝进行支付,而且微信除了支付之外,还要一个非常重要的功能,那就是聊天,在我们的微信里面有很多重要的我们想要留着纪念的微信聊 ...
最新文章
- mysql普通索引标记_Mysql 索引
- MySQL索引覆盖扫描(覆盖索引)
- CRM产品主数据介绍
- CF1063A Oh Those Palindromes
- 三星Galaxy Note 10 Pro渲染图曝光:挖孔屏+前摄居中
- Hard problem CodeForces - 706C
- ax200蓝牙驱动linux,AX200蓝牙驱动
- Xcode 报错及解决办法汇总
- 嵌入式驱动学习之PWM蜂鸣器驱动
- 帝国时代3 怎样旋转建筑物
- Three.js坐标系与变换矩阵快速入门
- Resultful API的拦截(拦截器——Interceptor)
- jasypt数据源加密
- 浅谈BIM技术在“智慧工地”建设中的应用
- SQL复杂查询,优化
- echarts异步数据加载MySQL_微信小程序 Echarts 异步数据更新
- 指南解读:急性心力衰竭中国急诊管理指南(2022)
- 电脑如何批量修改图片350dpi? 分享一款实用的在线图片处理工具
- 电子尺子怎么在线测量?几个步骤轻松测量
- 找果网教你苹果手机听筒坏了快速维修的方法
热门文章
- 如何靠球鞋护理赚到第一个10w
- 以太坊开发------使用Truffle打造去中心化的宠物商店
- 空调控制面板工作原理?如何控制暖风和冷风?
- 开发iPad 画中画功能遇到的一些问题
- Javaweb后端技术(上)
- java 字符串截取的几种方式 java获取当前路径的几种方法
- >算法笔记-动态规划-最短路径迪杰斯特拉算法
- 智能双曲线快速磨皮教程
- Python实现DNSlog自动识别外带
- 解决:Internet Explorer无法打开该Internet站点.请求的站点不可用,或找不到.请以后再试....