• 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.
  • 相关阅读:
    (转)交换两个变量的值,不使用第三个变量的四种法方
    Java权威编码规范
    Git的安装和设置
    ActiveMQ简单入门
    JMS术语
    求助 WPF ListViewItem样式问题
    初步探讨WPF的ListView控件(涉及模板、查找子控件)
    圆角button
    用Inno Setup来解决.NetFramework安装问题
    [!!!!!]Inno Setup教程-常见问题解答
  • 原文地址:https://www.cnblogs.com/cidgur/p/12408779.html
Copyright © 2020-2023  润新知