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

Laravel使用Spatie备份时如何获取备份文件名存入数据库

获取Laravel数据库备份文件名并存入数据库的方案

下面提供三种可行的方法,你可以根据实际场景选择:

方法一:监听备份成功事件(最可靠)

Laravel Backup包在备份完成后会触发BackupWasSuccessful事件,通过监听这个事件能直接拿到备份文件的完整信息:

  1. 生成监听器:
php artisan make:listener BackupSuccessfulListener
  1. 在生成的app/Listeners/BackupSuccessfulListener.php的handle方法中处理文件名:
public function handle(\Spatie\Backup\Events\BackupWasSuccessful $event)
{
    // 从事件对象中获取备份文件路径,再提取文件名
    $fileName = basename($event->backup->path());
    
    // 这里执行存入数据库的逻辑,示例:
    // \App\Models\BackupRecord::create(['file_name' => $fileName]);
}
  1. 在app/Providers/EventServiceProvider.php中注册事件与监听器:
protected $listen = [
    \Spatie\Backup\Events\BackupWasSuccessful::class => [
        \App\Listeners\BackupSuccessfulListener::class,
    ],
];

方法二:提前生成匹配格式的文件名

备份文件名遵循固定格式Laravel_YYYY-MM-DD-HH-MM-SS.zip,你可以在执行备份前先生成对应文件名,备份成功后直接使用:

// 生成符合规则的文件名
$fileName = 'Laravel_' . now()->format('Y-m-d-H-i-s') . '.zip';

// 执行备份
$backupResult = Artisan::call('backup:run --only-db');

// Artisan命令返回0代表执行成功
if ($backupResult === 0) {
    // 将文件名存入数据库
    // \App\Models\BackupRecord::create(['file_name' => $fileName]);
    
    return back()->with('success', __('Completed!The :x has been successfully completed.', ['x' => __('database backup')]));
}

注意:这个方法依赖于备份包的命名规则,如果后续官方修改了文件名格式,需要同步调整生成逻辑。

方法三:扫描备份目录获取最新文件

如果前两种方法不适用,可在备份成功后扫描storage/app/Laravel目录,取最新创建的文件:

$backupResult = Artisan::call('backup:run --only-db');

if ($backupResult === 0) {
    // 从Laravel文件系统中获取备份目录下的所有文件
    $latestBackup = collect(Storage::files('Laravel'))
        ->sortByDesc(fn($file) => Storage::lastModified($file))
        ->first();
    
    if ($latestBackup) {
        $fileName = basename($latestBackup);
        // 执行存入数据库的逻辑
    }
    
    return back()->with('success', __('Completed!The :x has been successfully completed.', ['x' => __('database backup')]));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:12:20