PHP code example of helgesverre / laravel-prunekeeper
1. Go to this page and download the library: Download helgesverre/laravel-prunekeeper library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
helgesverre / laravel-prunekeeper example snippets
class Flight extends Model
{
use Prunable;
use ArchivePrunedRecords; // Add this trait
public function prunable(): Builder
{
return static::where('created_at', '<=', now()->subYear());
}
}
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Prunable;
use HelgeSverre\Prunekeeper\ArchivePrunedRecords;
class Flight extends Model
{
use Prunable;
use ArchivePrunedRecords;
public function prunable(): Builder
{
return static::where('created_at', '<=', now()->subMonth());
}
}
use Illuminate\Database\Eloquent\MassPrunable;
use HelgeSverre\Prunekeeper\ArchivePrunedRecords;
class Flight extends Model
{
use MassPrunable;
use ArchivePrunedRecords;
public function prunable(): Builder
{
return static::where('created_at', '<=', now()->subMonth());
}
}
return [
// Storage disk (any Laravel filesystem disk)
'disk' => env('PRUNEKEEPER_DISK', 's3'),
// Base path for archived files
'path' => env('PRUNEKEEPER_PATH', 'prunable-exports'),
// Export format: 'csv' or 'sql'
'format' => env('PRUNEKEEPER_FORMAT', 'csv'),
// Compression settings
'compression' => [
'enabled' => env('PRUNEKEEPER_COMPRESS', true),
'driver' => env('PRUNEKEEPER_COMPRESSION_DRIVER', 'zip'), // zip, gzip, targz, bzip2
],
// Records per chunk when exporting
'chunk_size' => env('PRUNEKEEPER_CHUNK_SIZE', 1000),
// Enable/disable archiving globally
'enabled' => env('PRUNEKEEPER_ENABLED', true),
// Continue pruning if archiving fails
'fail_silently' => env('PRUNEKEEPER_FAIL_SILENTLY', false),
// Clean up temporary files after upload
'cleanup_temp_files' => true,
// Paths for model discovery (supports glob patterns)
'models_path' => ['app/Models', 'app'],
];
class Flight extends Model
{
use Prunable, ArchivePrunedRecords;
public function getArchivableColumns(): ?array
{
return ['id', 'number', 'destination', 'created_at'];
}
}
class Flight extends Model
{
use Prunable, ArchivePrunedRecords;
public function getArchiveFilename(string $format): ?string
{
return "flight-logs/{$this->getTable()}-" . now()->format('Y-m-d') . ".{$format}";
}
}
use HelgeSverre\Prunekeeper\Prunekeeper;
Prunekeeper::beforeArchiving(function ($model) {
Log::info("Starting archive for {$model->getTable()}");
});
Prunekeeper::afterArchiving(function ($model, $result) {
Log::info("Archived {$result->recordCount} records to {$result->storagePath}");
// Send notification, update metrics, etc.
});
use HelgeSverre\Prunekeeper\Events\ArchiveStarting;
use HelgeSverre\Prunekeeper\Events\ArchiveCompleted;
use HelgeSverre\Prunekeeper\Events\ArchiveFailed;
use HelgeSverre\Prunekeeper\Events\ArchiveSkipped;
// In EventServiceProvider or via Event::listen()
Event::listen(ArchiveStarting::class, function ($event) {
// $event->model - the model instance
// $event->recordCount - number of records to archive
});
Event::listen(ArchiveCompleted::class, function ($event) {
// $event->model - the model instance
// $event->result - ArchiveResult with path, size, format, etc.
});
Event::listen(ArchiveFailed::class, function ($event) {
// $event->model - the model instance
// $event->exception - the exception that occurred
});
Event::listen(ArchiveSkipped::class, function ($event) {
// $event->model - the model instance
// $event->reason - ArchiveSkipped::REASON_* constant
});
class Flight extends Model
{
use Prunable, ArchivePrunedRecords;
public function shouldArchiveBeforePruning(): bool
{
return app()->isProduction();
}
}