laravel 如何在不使用withMappingMap每个列的情况下格式化单个列?

rjee0c15  于 2023-05-19  发布在  其他
关注(0)|答案(1)|浏览(201)

我想将其中一列的日期列(作为字符串)格式化为另一种格式。
我找到的解决方案是使用withMapping

class ModelExcelExport implements FromCollection, WithColumnFormatting, withMapping
{
    public function collection()
    {
        return Model::select('id','email','date')->get();
    }

    public function map($model): array
    {
        return [
            $model->id,
            $model->email,
            \PhpOffice\PhpSpreadsheet\Shared\Date::stringToExcel($model->date),
        ];
    }

    public function columnFormats(): array
    {
        return [
           'C' => NumberFormat::FORMAT_DATE_DDMMYYYY,
        ];
    }
}

但要做到这一点,我必须Map所有的列,即使其中一些不需要任何格式。
在我的例子中,有更多的列(不像示例中那样只有3列),所以将每一列复制到map()方法是很麻烦的,因为我需要一个列(date列)以另一种格式。
当我只将date列放在map()中时,它将不起作用:

public function map($model): array
{
    return [
        \PhpOffice\PhpSpreadsheet\Shared\Date::stringToExcel($model->date)
    ];
}
qij5mzcb

qij5mzcb1#

这可能不是最好的答案,但是为了Map单个列,您可以使用Laravel内置的集合Map方法

class ModelExcelExport implements FromCollection, WithColumnFormatting, withMapping
{
    public function collection()
    {
        return Model::select('id','email','date')->get()->map(function($item) {
             $item->date = $item->format('dmY'); // formatting date using Carbon

             return $item;
        });
    }
}

相关问题