Easily import xlsx file right into you database just with some code lines! Validate your data with default laravel validator and search related values from other tables.
use Underwear\Import\Import;
use Underwear\Import\Elements\Text;
$dbTable = 'categories';
$xlsxFilepath = '/some/path/to/file.xlsx';
Import::make($dbTable, [
Text::make('title', 'A'),
Text::make('code', 'B')
->rules(['filled', 'size:12'])
->prepare(function ($value) {
return ucfirst($value);
}),
])->parseFile($xlsxFilepath);
use Underwear\Import\Elements\Text;
Text::make('targetTableColumnName', 'A');
You can add validation rules:
use Underwear\Import\Elements\Text;
Text::make('target_table_colum_name', 'A')
->rules(['filled', 'email']);
Or even add your own closure to mutate value
use Underwear\Import\Elements\Text;
Text::make('target_table_colum_name', 'A')
->prepare(function($value) {
return ucfirst($value);
});
You can generate slug from text
use Underwear\Import\Elements\Slug;
Slug::make('slug', 'B');
use Underwear\Import\Elements\Boolean;
Boolean::make('is_published', 'D')
->trueValue('yeap');
Do not uses xls cells to get value. Just generates by it owns.
use Underwear\Import\Elements\Autoincrement;
Autoincrement::make('order_column');
use Underwear\Import\Elements\BelongsTo;
BelongsTo::make('category_id', 'C', 'categories' , 'title', 'id');
// 3th arg: related table in database;
// 4th arg: column for searching in related table;
// 5th arg: column for value returning from related table;
Do not uses xls cells to get value. Just returns value
use Underwear\Import\Elements\Closure;
Closure::make('some_table_field', function() {
// code here whatever you want
return "something";
});
Use can also use fzaninotto/Faker
use Underwear\Import\Elements\Faker;
use Faker\Generator;
Faker::make('some_table_field', function(Generator $faker) {
return $faker->word;
});
You can install the package via composer:
composer require underwear/laravel-excel-import
Imagine we need to import some articles from xlsx file.
Xlsx file has some fields like:
- "title" (A column)
- "body" (B column)
- "category name" (C column)
- "is_published" (D column) with values "yeap" if true
DB table has columns:
- (int) id
- (string) title
- (string) slug
- (int fk) category_id
- (bool) is_published
- (int) order_column
use Underwear\Import\Import;
use Underwear\Import\Elements\Text;
use Underwear\Import\Elements\BelongsTo;
use Underwear\Import\Elements\Boolean;
use Underwear\Import\Elements\Autoincrement;
Import::make('articles', [
Text::make('title', 'A')
->rules(['filled']),
Slug::make('slug', 'A'),
BelongsTo::make('category_id', 'C', 'categories' , 'title', 'id'),
Boolean::make('is_published', 'D')
->trueValue('yeap'),
Autoincrement::make('order_column'),
])->parseFile('/path/to/articles.xlsx')