Tabulka
Importy tabulky
Wire Table umí importovat řádky z nahraného CSV souboru do modelu tabulky — zrcadlo Exportů. Sloupce mapují hlavičky souboru na atributy modelu, každá buňka se přetypuje a zvaliduje per sloupec a selhání validace po řádcích se sbírají místo přerušení běhu.
Na této stránce
Wire Table umí importovat řádky z nahraného CSV souboru do modelu tabulky — zrcadlo Exportů. Sloupce mapují hlavičky souboru na atributy modelu, každá buňka se přetypuje a zvaliduje per sloupec a selhání validace po řádcích se sbírají místo přerušení běhu.
Deklarace importéru
Připojte ImportAction s konfigurací TableImport do hlavičkových akcí tabulky:
use NyonCode\WireTable\Import\ImportAction;use NyonCode\WireTable\Import\ImportColumn;use NyonCode\WireTable\Import\TableImport; public function table(Table $table): Table{ return $table ->model(Contact::class) ->columns([...]) ->headerActions([ ImportAction::makeImport() ->importConfig( TableImport::make() ->model(Contact::class) ->columns([ ImportColumn::make('name') ->requiredMapping() ->rules(['required']), ImportColumn::make('email') ->rules(['nullable', 'email']) ->guess(['e-mail', 'mail']), ImportColumn::make('age') ->castStateUsing(fn ($value) => (int) $value), ]) ), ]);}
Spuštění importu
Hostitelský seam je WithTable::importTable(string $filePath): ImportResult. Aplikace k němu zapojí UI nahrání souboru — typicky Livewire upload, jehož reálná cesta dočasného souboru se předá dovnitř:
use Livewire\WithFileUploads; class Contacts extends Component{ use WithTable; use WithFileUploads; public $importFile = null; public function runImport(): void { $this->validate(['importFile' => 'required|file|mimes:csv,txt']); $result = $this->importTable($this->importFile->getRealPath()); // např. notifikace: "{$result->getImported()} imported, {$result->getFailedCount()} skipped" }}
importTable() vyresolvuje konfiguraci ImportAction z hlavičkových akcí tabulky (zrcadlí exportTable()) a invaliduje cachované záznamy, takže další render ukáže nové řádky.
Mapování hlaviček
Sloupec se spáruje s hlavičkou souboru podle svého labelu, názvu atributu nebo libovolného aliasu z guess() — case-insensitive a otrimované. Mapování se vyresolvuje jednou z řádku hlaviček.
requiredMapping()označí hlavičku, kterou soubor musí obsahovat; chybějící vyhodíRuntimeExceptionpřed zpracováním jakéhokoli řádku.- Nenamapované volitelné sloupce se pro každý řádek jednoduše přeskočí.
Validace po řádcích
rules() validují každou namapovanou buňku. Selhávající řádek se přeskočí a zaznamená — běh pokračuje:
$result = $this->importTable($path); $result->getImported(); // perzistované řádky$result->getFailedCount(); // řádky přeskočené validací$result->hasFailures();$result->getFailures(); // [['row' => 3, 'errors' => ['The Email field must be…']], …]
Aktualizovat nebo vytvořit
Párovat existující záznamy místo vždy vytvářet:
TableImport::make() ->model(Contact::class) ->columns([...]) ->updateExisting(['email']) // updateOrCreate klíčované emailem
Každý atribut updateExisting() musí být krmen namapovaným sloupcem souboru — nenamapovaný párovací atribut nechá celý běh selhat předem (jinak by prázdná množina párovacích klíčů tiše přepsala nesouvisející záznamy).
Vlastní perzistence
Převezměte perzistenci úplně pomocí createUsing() (model() není potřeba):
TableImport::make() ->columns([...]) ->createUsing(function (array $data) { Contact::firstOrNew(['email' => $data['email']])->fill($data)->save(); })
Volby CSV
TableImport::make() ->delimiter(';') ->enclosure('"')
Importér zvládá UTF-8 BOM, prázdné řádky a řádky s méně/více buňkami, než má hlavička (chybějící buňky se stanou prázdnými řetězci, přebytečné se zahodí). CSV je jediný podporovaný formát (jako importér ve Filamentu).
Metody
| Metoda | Na | Popis |
|---|---|---|
model(string) |
TableImport |
Cílový Eloquent model |
columns(array) |
TableImport |
Seznam ImportColumn |
delimiter(string) / enclosure(string) |
TableImport |
Volby parsování CSV |
updateExisting(array) |
TableImport |
Párovací atributy updateOrCreate |
createUsing(Closure) |
TableImport |
Vlastní handler perzistence po řádcích |
label(string|Closure) |
ImportColumn |
Popisek hlavičky (výchozí je headline z názvu) |
requiredMapping() |
ImportColumn |
Soubor musí obsahovat tento sloupec |
rules(array) |
ImportColumn |
Validační pravidla per buňka |
castStateUsing(Closure) |
ImportColumn |
Transformovat surovou hodnotu buňky |
guess(array) |
ImportColumn |
Alternativní názvy hlaviček |