I’ve recently been doing some significant work to overhaul the
BulkLoader system. I’ve been releasing my work into a module I’ve
called ‘importexport’ for now. Potentially this work could get
approved as a future replacement for SilverStripe’s core bulk
loading functionality.
New Features
Users can define column mappings via CSVFieldMapper /
GridFieldImporter.
CSV files can be previewed via the CSVPreviewer class.
Records can be skipped during import. Skipped records are
recorded in result object.
Introduced BulkLoaderSource as a way of abstracting CSV /
other source functionality away from the BulkLoader class.
Introduced ListBulkLoader for confining record CRUD actions to
a given DataList (HasManyList).
Decoupled CSVParser from BulkLoader. Column mapping is now
performed in BulkLoader on each record as it is loaded.
Replaced CSVParser with goodby/csv library.
Bug Fixes
Validation failing on DataObject->write() will cause a
record to be skipped, rather than halting the whole process.
Prevented bulk loader from trying to work with relation names
that don't exist. This would particularly cause issues when CSV
header names contained a ".".
From here...