You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用deleteInventory函数提示删除成功但数据库记录未删除

问题排查与解决方案

1. 检查模型是否启用软删除

如果你的InventoryStock模型使用了CodeIgniter的SoftDelete trait,调用delete()只会给记录标记删除状态(通常是设置deleted_at字段),不会物理删除数据库中的记录。

  • 验证方式:打开InventoryStock模型代码,查看是否存在use CodeIgniter\Model\SoftDelete;这类软删除相关代码。
  • 解决方法:
    • 若需要物理删除,将delete()替换为purgeDeleted():
      $deletedCount = $builder->whereIn('id', $ids)->purgeDeleted();
      
    • 若不需要软删除,直接移除模型中的软删除相关代码。

2. 避免Builder条件叠加

同一个Builder实例的查询条件会被保留,导致删除时额外带上之前的date_received过滤条件(理论上不影响,但可能隐藏数据格式或逻辑问题)。

  • 解决方法:删除操作时重新创建Builder实例,或清空之前的条件:
    重新创建Builder:
    // 重新创建Builder,避免之前的where条件干扰
    $builder = $stocktable->builder();
    $deletedCount = $builder->whereIn('id', $ids)->delete();
    
    或重置查询条件:
    $builder->resetQuery();
    $deletedCount = $builder->whereIn('id', $ids)->delete();
    

3. 验证$ids数组的有效性

确保收集到的$ids数组中没有null值,且均为数据库中存在的有效ID:

  • 调试方式:你的代码已在返回的JSON中包含ids字段,直接查看返回的ids是否为有效ID。若存在null,说明获取ID的逻辑存在问题:
    • 确认InventoryStock模型的主键为id,若为其他字段(如inventory_id),需修改代码中获取ID的部分。
    • 优化ID收集逻辑,过滤null值:
      foreach ($records as $record) {
          $id = null;
          if (is_array($record)) {
              $id = $record['id'] ?? null;
          } elseif (is_object($record)) {
              $id = $record->id ?? null;
          }
          if ($id !== null) {
              $ids[] = $id;
          }
      }
      // 额外检查:如果$ids为空,直接返回失败
      if (empty($ids)) {
          return json_encode([
              "success" => "False",
              "message" => "No valid record IDs found to delete."
          ]);
      }
      

4. 检查数据库事务与自动提交

如果应用开启了手动事务但未提交,删除操作不会生效:

  • 验证方式:检查代码中是否存在$db->transStart()但未执行$db->transComplete()的情况。
  • 解决方法:确保事务正确提交,或无需事务时移除相关代码,依赖数据库自动提交机制。

5. 查看实际执行的SQL语句

通过CodeIgniter的日志功能查看实际执行的删除SQL,确认条件是否正确:

  • 操作步骤:在app/Config/Database.php中设置$DBGroup['default']['logQueries'] = true;,然后前往writable/logs目录查看日志文件中的删除SQL,检查WHERE条件是否符合预期。

内容的提问来源于stack exchange,提问作者Faizan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:10:12