Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gevorgmansuryan/yii2-excel-import
Export excel sheets to ActiveRecord models
https://github.com/gevorgmansuryan/yii2-excel-import
composer php7 yii yii2 yii2-extension yiiframework
Last synced: 3 months ago
JSON representation
Export excel sheets to ActiveRecord models
- Host: GitHub
- URL: https://github.com/gevorgmansuryan/yii2-excel-import
- Owner: gevorgmansuryan
- License: mit
- Created: 2018-03-16T20:48:21.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-03-16T22:41:48.000Z (almost 7 years ago)
- Last Synced: 2024-09-27T14:21:02.913Z (4 months ago)
- Topics: composer, php7, yii, yii2, yii2-extension, yiiframework
- Language: PHP
- Size: 8.79 KB
- Stars: 8
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Yii2 Excel Importer
Import excel to ActiveRecord models## installation
using composer
```bash
composer require gevman/yii2-excel-import
```## methods
#### __constructor
supports array parameter with following attributes
- `filePath` - full path to excel file to be imported
- `activeRecord` - ActiveRecord class name where imported data should be saved
- `scenario` - ActiveRecord scenario, if leave empty no scenario will be set
- `skipFirstRow` - if true will skip excel's first row (eg. heading row), otherwise will try save first row also
- `fields[]` - array of field definitions##### fields[]
- `attribute` - attribute name from Your ActieRecord class
- `value` - if callable passed it will receive current row, and return value will be saved to AR, otherwise it will find element which key is passed value in current row#### validate
validates each populated AR model, and returns false if there's any error, otherwise it will return true#### save
Saves populated AR models, and returns an array of each saved AR model's primary key
if models is not validated yet, it will validate all models before save#### getErrors
Will return array of AR model errors indexed by row's index#### getModels
Will return array of populated AR models## examples
- Define Fields
```php
$uploadedFile = \yii\web\UploadedFile::getInstanceByName('file');$importer = new \Gevman\Yii2Excel\Importer([
'filePath' => $uploadedFile->tempName,
'activeRecord' => Product::class,
'scenario' => Product::SCENARIO_IMPORT,
'skipFirstRow' => true,
'fields' => [
[
'attribute' => 'keywords',
'value' => 1,
],
[
'attribute' => 'itemTitle',
'value' => 2,
],
[
'attribute' => 'marketplaceTitle',
'value' => 3,
],
[
'attribute' => 'brand',
'value' => function ($row) {
return strval($row[4]);
},
],
[
'attribute' => 'category',
'value' => function ($row) {
return strval($row[4]);
},
],
[
'attribute' => 'mpn',
'value' => function ($row) {
return strval($row[6]);
},
],
[
'attribute' => 'ean',
'value' => function ($row) {
return strval($row[7]);
},
],
[
'attribute' => 'targetPrice',
'value' => 8,
],
[
'attribute' => 'photos',
'value' => function ($row) {
$photos = [];
foreach (StringHelper::explode(strval($row[11]), ',', true, true) as $photo) {
if (filter_var($photo, FILTER_VALIDATE_URL)) {
$file = @file_get_contents($photo);
if ($file) {
$filename = md5($file) . '.jpg';
file_put_contents(Yii::getAlias("@webroot/gallery/$filename"), $file);
$photos[] = $filename;
}
} else {
$photos[] = $photo;
}
}return implode(',', $photos);
}
],
[
'attribute' => 'currency',
'value' => 13,
],
],
]);
```
- Validate, Save, and show errors
```php
if (!$importer->validate()) {
foreach($importer->getErrors() as $rowNumber => $errors) {
echo "$rowNumber errors
" . implode('
', $errors);
}
} else {
$importer->save();
}
```of just
```php
$importer->save();foreach($importer->getErrors() as $rowNumber => $errors) {
echo "$rowNumber errors
" . implode('
', $errors);
}
```