50 lines
1.2 KiB
PHP
50 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace Dipper\Excel;
|
|
|
|
use Illuminate\Support\Collection;
|
|
use Dipper\Excel\Concerns\ToArray;
|
|
use Dipper\Excel\Concerns\ToModel;
|
|
use Dipper\Excel\Concerns\ToCollection;
|
|
use Dipper\Excel\Concerns\WithMappedCells;
|
|
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
|
|
use Dipper\Excel\Concerns\WithCalculatedFormulas;
|
|
|
|
class MappedReader
|
|
{
|
|
/**
|
|
* @param WithMappedCells $import
|
|
* @param Worksheet $worksheet
|
|
*
|
|
* @throws \PhpOffice\PhpSpreadsheet\Exception
|
|
*/
|
|
public function map(WithMappedCells $import, Worksheet $worksheet)
|
|
{
|
|
$mapped = [];
|
|
foreach ($import->mapping() as $name => $coordinate) {
|
|
$cell = Cell::make($worksheet, $coordinate);
|
|
|
|
$mapped[$name] = $cell->getValue(
|
|
null,
|
|
$import instanceof WithCalculatedFormulas
|
|
);
|
|
}
|
|
|
|
if ($import instanceof ToModel) {
|
|
$model = $import->model($mapped);
|
|
|
|
if ($model) {
|
|
$model->saveOrFail();
|
|
}
|
|
}
|
|
|
|
if ($import instanceof ToCollection) {
|
|
$import->collection(new Collection($mapped));
|
|
}
|
|
|
|
if ($import instanceof ToArray) {
|
|
$import->array($mapped);
|
|
}
|
|
}
|
|
}
|