当没有调用显式删除操作时,如何在 Laravel 中记录意外的数据删除?

问题描述 投票:0回答:1

我正在开发 Laravel 应用程序,遇到了一些数据被意外删除的问题,但我无法确定删除发生在哪里。我正在使用以下代码来检索一些数据,但有时,这些数据会在没有任何显式删除方法调用的情况下被删除。

这是我正在使用的代码:

$manifest = Manifest::where('manifest_date', $manifestDate)
    ->where(function ($query) use ($selctedCity) {
        $query->whereNull('city_id')
              ->orWhere('city_id', $selctedCity);
    })
    ->whereIn('status', [1, 2])->first();

if (!empty($manifest)) {
    $deliveries = $manifest->deliveries()->orderBy('delivery_window', 'asc')->get();
} else {
    $deliveries = null;
}

但是,有时这些数据会被删除,并且我在代码中没有看到任何显式的删除操作。我怀疑数据可能会在其他地方被删除(可能通过级联删除或其他一些查询),但我不确定如何跟踪它。

当没有调用显式删除操作时,如何在 Laravel 中记录数据的删除? 在 Laravel 中跟踪意外删除的最佳实践是什么(例如,模型事件、查询日志记录或数据库约束)? 有没有办法通过 ON DELETE CASCADE 检查删除操作是否由于外键而发生?

laravel logging eloquent cascading-deletes
1个回答
0
投票

请按照以下步骤调试问题:

  1. 在模型的
    deleting
    方法中使用
    deleted
    boot
    事件。
  2. 使用
    \DB::enableQueryLog();
    激活查询日志记录以跟踪所有数据库交互,包括删除。
  3. 添加日志以便更轻松地跟踪和了解删除事件。
© www.soinside.com 2019 - 2024. All rights reserved.