diff --git a/config/excel.php b/config/excel.php index fa3e12b28..c3199b925 100755 --- a/config/excel.php +++ b/config/excel.php @@ -3,7 +3,6 @@ use Maatwebsite\Excel\Excel; return [ - 'exports' => [ /* @@ -24,6 +23,16 @@ return [ */ 'pre_calculate_formulas' => false, + /* + |-------------------------------------------------------------------------- + | Enable strict null comparison + |-------------------------------------------------------------------------- + | + | When enabling strict null comparison empty cells ('') will + | be added to the sheet. + */ + 'strict_null_comparison' => false, + /* |-------------------------------------------------------------------------- | CSV Settings @@ -40,23 +49,66 @@ return [ 'include_separator_line' => false, 'excel_compatibility' => false, ], + + /* + |-------------------------------------------------------------------------- + | Worksheet properties + |-------------------------------------------------------------------------- + | + | Configure e.g. default title, creator, subject,... + | + */ + 'properties' => [ + 'creator' => '', + 'lastModifiedBy' => '', + 'title' => '', + 'description' => '', + 'subject' => '', + 'keywords' => '', + 'category' => '', + 'manager' => '', + 'company' => '', + ], ], 'imports' => [ + /* + |-------------------------------------------------------------------------- + | Read Only + |-------------------------------------------------------------------------- + | + | When dealing with imports, you might only be interested in the + | data that the sheet exists. By default we ignore all styles, + | however if you want to do some logic based on style data + | you can enable it by setting read_only to false. + | + */ 'read_only' => true, - 'heading_row' => [ + /* + |-------------------------------------------------------------------------- + | Ignore Empty + |-------------------------------------------------------------------------- + | + | When dealing with imports, you might be interested in ignoring + | rows that have null values or empty strings. By default rows + | containing empty strings or empty values are not ignored but can be + | ignored by enabling the setting ignore_empty to true. + | + */ + 'ignore_empty' => false, - /* - |-------------------------------------------------------------------------- - | Heading Row Formatter - |-------------------------------------------------------------------------- - | - | Configure the heading row formatter. - | Available options: none|slug|custom - | - */ + /* + |-------------------------------------------------------------------------- + | Heading Row Formatter + |-------------------------------------------------------------------------- + | + | Configure the heading row formatter. + | Available options: none|slug|custom + | + */ + 'heading_row' => [ 'formatter' => 'slug', ], @@ -69,12 +121,33 @@ return [ | */ 'csv' => [ - 'delimiter' => ',', - 'enclosure' => '"', - 'escape_character' => '\\', - 'contiguous' => false, - 'input_encoding' => 'UTF-8', + 'delimiter' => ',', + 'enclosure' => '"', + 'escape_character' => '\\', + 'contiguous' => false, + 'input_encoding' => 'UTF-8', ], + + /* + |-------------------------------------------------------------------------- + | Worksheet properties + |-------------------------------------------------------------------------- + | + | Configure e.g. default title, creator, subject,... + | + */ + 'properties' => [ + 'creator' => '', + 'lastModifiedBy' => '', + 'title' => '', + 'description' => '', + 'subject' => '', + 'keywords' => '', + 'category' => '', + 'manager' => '', + 'company' => '', + ], + ], /* @@ -82,9 +155,8 @@ return [ | Extension detector |-------------------------------------------------------------------------- | - | Configure here which writer type should be used when - | the package needs to guess the correct type - | based on the extension alone. + | Configure here which writer/reader type should be used when the package + | needs to guess the correct type based on the extension alone. | */ 'extension_detector' => [ @@ -116,39 +188,93 @@ return [ 'pdf' => Excel::DOMPDF, ], + /* + |-------------------------------------------------------------------------- + | Value Binder + |-------------------------------------------------------------------------- + | + | PhpSpreadsheet offers a way to hook into the process of a value being + | written to a cell. In there some assumptions are made on how the + | value should be formatted. If you want to change those defaults, + | you can implement your own default value binder. + | + | Possible value binders: + | + | [x] Maatwebsite\Excel\DefaultValueBinder::class + | [x] PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class + | [x] PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder::class + | + */ 'value_binder' => [ - - /* - |-------------------------------------------------------------------------- - | Default Value Binder - |-------------------------------------------------------------------------- - | - | PhpSpreadsheet offers a way to hook into the process of a value being - | written to a cell. In there some assumptions are made on how the - | value should be formatted. If you want to change those defaults, - | you can implement your own default value binder. - | - */ 'default' => Maatwebsite\Excel\DefaultValueBinder::class, ], - 'transactions' => [ + 'cache' => [ + /* + |-------------------------------------------------------------------------- + | Default cell caching driver + |-------------------------------------------------------------------------- + | + | By default PhpSpreadsheet keeps all cell values in memory, however when + | dealing with large files, this might result into memory issues. If you + | want to mitigate that, you can configure a cell caching driver here. + | When using the illuminate driver, it will store each value in a the + | cache store. This can slow down the process, because it needs to + | store each value. You can use the "batch" store if you want to + | only persist to the store when the memory limit is reached. + | + | Drivers: memory|illuminate|batch + | + */ + 'driver' => 'memory', /* |-------------------------------------------------------------------------- - | Transaction Handler + | Batch memory caching |-------------------------------------------------------------------------- | - | By default the import is wrapped in a transaction. This is useful - | for when an import may fail and you want to retry it. With the - | transactions, the previous import gets rolled-back. - | - | You can disable the transaction handler by setting this to null. - | Or you can choose a custom made transaction handler here. - | - | Supported handlers: null|db + | When dealing with the "batch" caching driver, it will only + | persist to the store when the memory limit is reached. + | Here you can tweak the memory limit to your liking. | */ + 'batch' => [ + 'memory_limit' => 60000, + ], + + /* + |-------------------------------------------------------------------------- + | Illuminate cache + |-------------------------------------------------------------------------- + | + | When using the "illuminate" caching driver, it will automatically use + | your default cache store. However if you prefer to have the cell + | cache on a separate store, you can configure the store name here. + | You can use any store defined in your cache config. When leaving + | at "null" it will use the default store. + | + */ + 'illuminate' => [ + 'store' => null, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Transaction Handler + |-------------------------------------------------------------------------- + | + | By default the import is wrapped in a transaction. This is useful + | for when an import may fail and you want to retry it. With the + | transactions, the previous import gets rolled-back. + | + | You can disable the transaction handler by setting this to null. + | Or you can choose a custom made transaction handler here. + | + | Supported handlers: null|db + | + */ + 'transactions' => [ 'handler' => 'db', ], @@ -163,7 +289,7 @@ return [ | storing reading or downloading. Here you can customize that path. | */ - 'local_path' => sys_get_temp_dir(), + 'local_path' => storage_path('framework/laravel-excel'), /* |-------------------------------------------------------------------------- @@ -179,8 +305,24 @@ return [ | in conjunction with queued imports and exports. | */ - 'remote_disk' => null, - 'remote_prefix' => null, + 'remote_disk' => null, + 'remote_prefix' => null, + /* + |-------------------------------------------------------------------------- + | Force Resync + |-------------------------------------------------------------------------- + | + | When dealing with a multi server setup as above, it's possible + | for the clean up that occurs after entire queue has been run to only + | cleanup the server that the last AfterImportJob runs on. The rest of the server + | would still have the local temporary file stored on it. In this case your + | local storage limits can be exceeded and future imports won't be processed. + | To mitigate this you can set this config value to be true, so that after every + | queued chunk is processed the local temporary file is deleted on the server that + | processed it. + | + */ + 'force_resync_remote' => null, ], ]; diff --git a/config/repository.php b/config/repository.php index 3123c2789..f8498b8db 100755 --- a/config/repository.php +++ b/config/repository.php @@ -169,7 +169,8 @@ return [ */ 'acceptedConditions' => [ '=', - 'like' + 'like', + 'in' ], /* |-------------------------------------------------------------------------- diff --git a/stubs/export.model.stub b/stubs/export.model.stub new file mode 100644 index 000000000..af6f6b839 --- /dev/null +++ b/stubs/export.model.stub @@ -0,0 +1,17 @@ +