Laravel Excel конвертировать изменить формат даты - PullRequest
1 голос
/ 03 октября 2019

Я пытаюсь преобразовать дату с помощью laravel excel, ниже мой код:

<?php

namespace App\Exports;

use App\Project;

use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;

class ProjectExport implements FromCollection, WithHeadings, WithMapping, ShouldAutoSize, WithTitle, WithEvents, WithColumnFormatting
{
    public function collection()
    {
        return Project::with('developer_projects')->get();
    }

    // Select data from query and set its position
    public function map($project): array
    {
        return [
            $project->name,
            Date::dateTimeToExcel($project->created_at),
            Date::dateTimeToExcel($project->start_date),
            Date::dateTimeToExcel($project->expiry_date),
        ];
    }

    // Set Date Format
    public function columnFormats(): array
    {
        return [
            'E' => NumberFormat::FORMAT_DATE_DDMMYYYY,
            'F' => NumberFormat::FORMAT_DATE_DDMMYYYY,
            'G' => NumberFormat::FORMAT_DATE_DDMMYYYY,
        ];
    }
}

Так что мне удается преобразовать поля create_at и expiry_date, но по какой-то причине моя начальная дата не удаетсябыть преобразованным, и я получаю эту ошибку:

Аргумент 1 передан PhpOffice \ PhpSpreadsheet \ Shared \ Date :: dateTimeToExcel () должен реализовывать интерфейс DateTimeInterface, строка дана

Я проверил в своей базе данных его поле даты.

start_date и expiry_date - это поле даты, а create_at - отметка времени

, если я преобразую Excel по умолчанию, expiry_date и creation_at:

2019-09-27 18: 54: 54

пока начальная дата выглядит так:

2014-10-22

1 Ответ

3 голосов
/ 03 октября 2019

Добавьте start_date к атрибуту $dates в вашей Project модели

class Project extends Model
{
    protected $dates = ['created_at', 'updated_at', 'expiry_date', 'start_date'];
}

Если атрибут находится в $dates, поле будет возвращено как экземпляр Carbonи не простая строка, тогда Maatwebsites Excel будет использовать ее для получения правильного формата.

...