Как создать новый столбец при экспорте таблицы. Laravel maatwebsite / excel - PullRequest
2 голосов
/ 02 августа 2020

Подскажите, пожалуйста, как создать новую колонку при экспорте (в exel) таблицы. В БД есть такая таблица: enter image description here

I installed package for export maatwebsite / excel. There is also a my file of model:

class ScheduledInspectionModel extends Model
{
    protected $table = 'scheduled_inspection'; // table name
    protected $fillable = ['name_smp', 'name_control', "verification_start", "verification_end", 'verification_duration'];
    public $timestamps = false;
}

Controller:

class OrganizationsExportController extends Controller
{
    public function export()
    {
        return (new OrganizationsExport)->download('organizations_export.xls');
    }
}

And file with export description:

class OrganizationsExport implements FromCollection, ShouldAutoSize, WithHeadings, WithEvents
{
    use Exportable;
    /**
     * @return \Illuminate\Support\Collection
     */
    public function collection()
    {
        return ScheduledInspectionModel::all();
    }

    public function headings(): array
    {
        return [
            'id',
            'Name SMP',
            'Name Control',
            'Verification Start',
            'Verification End',
            'Verification Duration'
        ];
    }

    public function registerEvents(): array
    {
        return [
            AfterSheet::class => function (AfterSheet $event) {
                $event->sheet->getStyle('A1:F1')->applyFromArray([
                    'font' => [
                        'bold' => true
                    ]
                ]);
            }
        ];
    }
}

The exported table looks like this: введите описание изображения здесь

Экспорт работает :) Но я хочу создать вместо столбца «id» (я могу исключить его с помощью map ()) столбец «Number» и ввести соответствующую нумерацию строк. Подскажите пожалуйста, как это сделать?

1 Ответ

1 голос
/ 02 августа 2020

Я бы использовал функцию map() при экспорте, здесь вы можете настроить источник каждого столбца. Я использовал имена столбцов в вашей базе данных, потому что не знал структуры. Добавляйте единицу к счетчику каждый раз, когда он трансформируется, и вы должны быть золотыми, что делается с помощью оператора ++.

private $count = 0;

public function map(ScheduledInspectionModel $inspection): array
{
    return [
        ++$this->count,
        $inspection->name_smp,
        $inspection->name_control,
        $inspection->verification_start->format('Y-m-d') . ' - ' .$inspection->verification_end->format('Y-m-d'),
        $inspection->duration,
    ];
}

Чтобы вызвать формат по датам, вы должны установить массив дат на вашем модель.

class ScheduledInspectionModel {
    protected $dates = [
        'verification_start',
        'verification_end',
    ];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...