thinkPHP 框架 delete方法無法刪除數據 【已解決】


今天在開發的過程中,遇到使用框架的 delete 方法刪除數據失敗。

原因

判斷應該是使用了軟刪除的問題(即 使用了 SoftDelete 這個 trait)

通過代碼追蹤,找到以下原因:

// 在 \think\db\Query::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 都可以,因為不管是靜態調用或者對象調用,在模型底層都是通過魔術方法來實現的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM