#
Enums Reference
Laravel Ingest uses several PHP 8.1+ enums for type-safe configuration. This page documents all available enums and their values.
#
IngestStatus
Represents the current state of an import run.
Namespace: LaravelIngest\Enums\IngestStatus
use LaravelIngest\Enums\IngestStatus;
#
Usage Examples
use LaravelIngest\Enums\IngestStatus;
use LaravelIngest\Models\IngestRun;
// Check run status
$run = IngestRun::find(1);
if ($run->status === IngestStatus::COMPLETED) {
echo "Import completed successfully!";
}
if ($run->status === IngestStatus::COMPLETED_WITH_ERRORS) {
echo "Import completed with {$run->failed_rows} failed rows.";
}
// Query by status
$processingRuns = IngestRun::where('status', IngestStatus::PROCESSING)->get();
$failedRuns = IngestRun::where('status', IngestStatus::FAILED)->get();
// Get string value for API responses
$statusString = $run->status->value; // 'completed', 'failed', etc.
#
Status Flow
PENDING → PROCESSING → COMPLETED
↘ COMPLETED_WITH_ERRORS
↘ FAILED
#
SourceType
Defines where import data comes from.
Namespace: LaravelIngest\Enums\SourceType
use LaravelIngest\Enums\SourceType;
#
Usage Examples
use LaravelIngest\Enums\SourceType;
use LaravelIngest\IngestConfig;
// File uploads (via API)
IngestConfig::for(User::class)
->fromSource(SourceType::UPLOAD)
// Local/S3 filesystem
IngestConfig::for(Product::class)
->fromSource(SourceType::FILESYSTEM, [
'path' => 'imports/products.csv',
'disk' => 's3',
])
// FTP server
IngestConfig::for(Order::class)
->fromSource(SourceType::FTP, [
'disk' => 'ftp-server',
'path' => 'exports/orders.csv',
])
// SFTP server
IngestConfig::for(Invoice::class)
->fromSource(SourceType::SFTP, [
'disk' => 'sftp-server',
'path' => 'data/invoices.csv',
])
// Remote URL
IngestConfig::for(Rate::class)
->fromSource(SourceType::URL, [
'url' => 'https://api.example.com/rates.csv',
])
// JSON with streaming (memory efficient for large files)
IngestConfig::for(Event::class)
->fromSource(SourceType::JSON, [
'path' => 'data/events.json',
'pointer' => '/data/items', // JSON pointer to array
])
#
DuplicateStrategy
Defines behavior when a record with matching keyedBy value already exists.
Namespace: LaravelIngest\Enums\DuplicateStrategy
use LaravelIngest\Enums\DuplicateStrategy;
#
Usage Examples
use LaravelIngest\Enums\DuplicateStrategy;
use LaravelIngest\IngestConfig;
// Skip duplicates (default) - good for append-only imports
IngestConfig::for(User::class)
->keyedBy('email')
->onDuplicate(DuplicateStrategy::SKIP)
// Always update - good for full syncs
IngestConfig::for(Product::class)
->keyedBy('sku')
->onDuplicate(DuplicateStrategy::UPDATE)
// Fail on duplicates - good for strict imports
IngestConfig::for(Transaction::class)
->keyedBy('transaction_id')
->onDuplicate(DuplicateStrategy::FAIL)
// Conditional update based on timestamp
IngestConfig::for(Article::class)
->keyedBy('external_id')
->onDuplicate(DuplicateStrategy::UPDATE_IF_NEWER)
->compareTimestamp('last_modified', 'updated_at')
#
Decision Guide
#
TransactionMode
Controls database transaction behavior during import.
Namespace: LaravelIngest\Enums\TransactionMode
use LaravelIngest\Enums\TransactionMode;
#
Usage Examples
use LaravelIngest\Enums\TransactionMode;
use LaravelIngest\IngestConfig;
// No transactions (default) - fastest, partial imports possible
IngestConfig::for(LogEntry::class)
->transactionMode(TransactionMode::NONE)
// Chunk transactions - balanced approach
// If one row in a chunk fails, the entire chunk rolls back
IngestConfig::for(Order::class)
->transactionMode(TransactionMode::CHUNK)
->setChunkSize(50)
// Same as TransactionMode::CHUNK
IngestConfig::for(Order::class)
->atomic()
// Row transactions - safest but slowest
// Each row is isolated, useful for complex afterRow hooks
IngestConfig::for(Invoice::class)
->transactionMode(TransactionMode::ROW)
#
Performance vs. Consistency Trade-offs
#
Using Enums in Queries
All enums are backed by string values, making them easy to use in database queries:
use LaravelIngest\Enums\IngestStatus;
use LaravelIngest\Models\IngestRun;
// Using enum directly (recommended)
$runs = IngestRun::where('status', IngestStatus::COMPLETED)->get();
// Using string value
$runs = IngestRun::where('status', 'completed')->get();
// Multiple statuses
$activeRuns = IngestRun::whereIn('status', [
IngestStatus::PENDING,
IngestStatus::PROCESSING,
])->get();
#
Type Hints
Use enums in your own code for type safety:
use LaravelIngest\Enums\IngestStatus;
function handleCompletedImport(IngestRun $run): void
{
if ($run->status !== IngestStatus::COMPLETED) {
throw new \InvalidArgumentException('Run must be completed');
}
// Process completed import...
}
function getStatusLabel(IngestStatus $status): string
{
return match($status) {
IngestStatus::PENDING => 'Waiting to start',
IngestStatus::PROCESSING => 'In progress',
IngestStatus::COMPLETED => 'Finished',
IngestStatus::COMPLETED_WITH_ERRORS => 'Finished with errors',
IngestStatus::FAILED => 'Failed',
};
}