thinkPHP 框架 delete方法无法删除数据 【已解决】

今天在开发的过程中,遇到使用框架的 delete 方法删除数据失败。

原因

判断应该是使用了软删除的问题(即 使用了 SoftDelete 这个 trait)

通过代码追踪,找到以下原因:

// 在 	hinkdbQuery::delete() 方法
// 作者在底层代码中为了兼容 软删除做了一些逻辑,把 解析出来的 soft_delete 选项的条件做为 update 的数据了
// 通过打印 下面的 $this->options['soft_delete'] 得出是 一个条件表达式的 二维数组 
/*
  [
    [0] => "__TABLE__.delete_time",
    [1] => [
      [0] => "="
      [1] => 0
    ]
  ]
*/
 // 最终 又将条件作为 更新的数据 去做 update 操作,最终在生成sql 的时候,语句为空字符串,就造成了 删除无效的情况

// 解决办法

// 在使用 SoftDelete trait 的模型类里,自定义封装一个 删除的方法
// 在输入where条件后,
// 通过链式操作 修改 options 属性的 soft_delete 元素 (注意:如果直接通过 $this->setOption 非链式 修改options 是没有用的)
// 最终再调用 底层的delete 方法就可以了
// PS: 截图中最后的代码 self::where 或者 $this->where 都可以,因为不管是静态调用或者对象调用,在模型底层都是通过魔术方法来实现的

Talk is cheap, show me the code.
原文地址:https://www.cnblogs.com/cidgur/p/12408779.html