我正在开发 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 检查删除操作是否由于外键而发生?
请按照以下步骤调试问题:
deleting
方法中使用 deleted
和 boot
事件。\DB::enableQueryLog();
激活查询日志记录以跟踪所有数据库交互,包括删除。