waad/filament-import-wizard
Feat: Complete import wizard overhaul — reverse mapping UI, relation FK fixes, Eloquent events, Translatable support, and performance optimizations.
Issue #1
Resolve them.
split to 7 tasks from Issue #1, delivering a complete overhaul of the import wizard with a reversed mapping UI, critical bug fixes for relation foreign keys, Eloquent lifecycle support, Spatie Translatable integration, and performance optimizations for large datasets.
mapping.blade.php$modelFieldMappings, $relationFieldMappings, $fieldTypes propertiesinitializeModelFieldMappings() with snake_case auto-matching (e.g., Title → title, CategoryId → category_id)syncMappingsToColumnMappings() to convert back to $columnMappings format for ProcessImportChunkgetUnmappedCsvColumns() to show leftover CSV headerstoggleMergeTranslation() for translatable field multi-column supporttitle_en, name_ar)fillable check that skipped relations when model uses $guarded = []resolveFillable() helper that falls back to Schema::getColumnListing()wire:model.live with wire:change + hidden inputs for relation selects to avoid Livewire v3 dot-notation issuesnormalizeRecordKeys() to ensure all records have consistent column keys before bulk insertVALUES lists must all be the same length errors when rows have varying columnsinsertRecordsAsModels() that uses Eloquent save() inside a transactionaddTimestampsToRecords() for upsert pathboot(), observers, and lifecycle hookswhere("field->locale", value) with Laravel's whereJsonContains()$model->{$fieldName} = [$locale => $value]getTranslatableFields() detection via schema inspection$cellIterator->setIterateOnlyExistingCells(true) in parseExcel()$cachedRelations and $cachedGroupedColumns to avoid duplicate reflection loopsparseCsv() using preg_replace('/^\xEF\xBB\xBF/', '', $h)loadCsvChunk() before array_combine()completed_with_errors statusLog::warning to Log::debug for productioncompleted_with_errors UI handling in import.blade.php + translation keyHow can I help you explore Laravel packages today?