Skip to content

Commit

Permalink
feat: WithHeadings was implemented for imports and exports.
Browse files Browse the repository at this point in the history
  • Loading branch information
Josemprog committed Dec 2, 2020
1 parent 70c9dcf commit 6ead3d7
Show file tree
Hide file tree
Showing 7 changed files with 52 additions and 20 deletions.
22 changes: 20 additions & 2 deletions app/Exports/ProductsExport.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,31 @@
use Illuminate\Contracts\Queue\ShouldQueue;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;

class ProductsExport implements FromQuery, ShouldQueue
class ProductsExport implements FromQuery, ShouldQueue, WithHeadings
{
use Exportable;

public function query()
{
return Product::query();
}
}

/**
* @return array
*/
public function headings(): array
{
return [
'id',
'brand',
'name',
'price',
'quantity',
'description',
'image',
'enabled'
];
}
}
15 changes: 6 additions & 9 deletions app/Http/Controllers/Admin/ProductController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
use Illuminate\Http\Request;
use App\Exports\ProductsExport;
use App\Imports\ProductsImport;
use Maatwebsite\Excel\Facades\Excel;
use App\Http\Controllers\Controller;
use Intervention\Image\Facades\Image;
use App\Http\Requests\ProductsRequest;
Expand Down Expand Up @@ -57,7 +56,7 @@ public function store(ProductsRequest $request)
$product->save();

return redirect()
->route('products.panel')
->route('products.index')
->with('message', 'Product Created');
}

Expand Down Expand Up @@ -108,7 +107,7 @@ public function update(Product $product, ProductsRequest $request): \Illuminate\
}

return redirect()
->route('products.panel')
->route('products.index')
->with('message', "Edited Product $product->name");
}

Expand All @@ -126,7 +125,7 @@ public function destroy(Product $product): \Illuminate\Http\RedirectResponse
$product->delete();

return redirect()
->route('products.panel')
->route('products.index')
->with('message', 'Product Removed');
}

Expand All @@ -153,12 +152,10 @@ public function export(): \Illuminate\Http\RedirectResponse
* @param Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function import(Request $request): \Illuminate\Http\RedirectResponse
public function import(Request $request, ProductsImport $productsImport): \Illuminate\Http\RedirectResponse
{
$file = $request->file('file');
$productsImport->import($request->importFile);

Excel::import(new ProductsImport, $file, 'public');

return back()->with('message', 'lleve');
return back()->with('message', 'The Import has been completed successfully!');
}
}
33 changes: 25 additions & 8 deletions app/Imports/ProductsImport.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,42 @@
namespace App\Imports;

use App\Product;
use Maatwebsite\Excel\Concerns\Importable;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class ProductsImport implements ToModel
class ProductsImport implements ToModel, WithHeadingRow
{
use Importable;

/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
$product = Product::find($row['id']);
return $product ? $this->updateProduct($product, $row) : $this->createProduct($row);
}

public function createProduct($row)
{
return new Product([
'brand' => $row[1],
'name' => $row[2],
'price' => $row[3],
'quantity' => $row[4],
'description' => $row[5],
'image' => $row[6],
'enabled' => $row[7],
'id' => $row['id'],
'brand' => $row['brand'],
'name' => $row['name'],
'price' => $row['price'],
'quantity' => $row['quantity'],
'description' => $row['description'],
'image' => $row['image'],
'enabled' => $row['enabled'],
]);
}

public function updateProduct(Product $product, $row)
{
$product->update($row);
return $product;
}
}
2 changes: 1 addition & 1 deletion resources/views/admin/products/index.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@

<div class="input-group">
<div class="custom-file">
<input name="file" type="file" class="custom-file-input" id="inputGroupFile04"
<input name="importFile" type="file" class="custom-file-input" id="inputGroupFile04"
aria-describedby="inputGroupFileAddon04">
<label class="custom-file-label" for="inputGroupFile04">Choose file</label>
</div>
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 comments on commit 6ead3d7

Please sign in to comment.