【问题标题】:Exporting Laravel Model to Excel but with modification of created_at column to only date not datetime将 Laravel 模型导出到 Excel,但将 created_at 列修改为仅日期而不是日期时间
【发布时间】:2020-12-06 05:38:00
【问题描述】:

我尝试在将集合返回以使用 maatwebsite Excel 导出之前对其进行修改。我试图修改的列是 created_date 列(laravel 的默认 created_date),所以当导出到 excel 时,我只得到日期而不是日期时间。

我试过了:

namespace App\Exports;

use App\Invoice;
use Maatwebsite\Excel\Concerns\FromCollection;

class InvoicesExport implements FromCollection
{
    public function collection()
    {
        $temp = Invoice::all();
        $len = count($temp);
        for($i=0;$i<$len;$i+=1){
            $temp[$i]->created_at = $temp[$i]->created_at->format('m/d/Y')
        }
        return $temp;
    }
}

在控制器中:

public function export() 
{
    return Excel::download(new InvoicesExport, 'invoices.xlsx');
}

但是,当导出时,excel文件中的结果是,例如:'07/26/2016T00:00:00.000000Z'

我注意到时间变为零,当我尝试时:

$temp[$i]->created_at = "some random string"

网页中的laravel返回错误说“一些随机字符串”不能被Carbon Class构造函数解析为日期时间。

如何使导出不使用我在“created_at”列中给出的字符串构造日期时间,而只返回纯字符串?如果让我们说,我不能修改数据库所以我不能创建额外的列和额外的列对于这个简单的事情太多了,我想。

【问题讨论】:

    标签: excel laravel-5 php-carbon


    【解决方案1】:

    如果您使用 Maatwebsite\Excel 2.1,请尝试使用 setColumnFormat($array) 方法进行列格式化。

    如果 Maatwebsite\Excel 3.1,请尝试使用 WithMapping 接口。

    【讨论】:

      【解决方案2】:

      created_at 在模型的$cast 属性中默认标记为'datetime',因此当您设置它时,它会自动转换为日期(使用Carbon::parse('the value you gave')

      如果您想导出带有某些格式化值的集合,则不应改变原始对象的对象,而是创建不会干扰模型行为或破坏现有对象的新专用对象/数组。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-07
        • 2022-01-17
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多