使用 Laravel Excel 导入 Laravel 时的日期和长数字问题

问题描述 投票:0回答:1

我有一些数据要使用 Laravel Excel 导入,并希望像输入一样存储它。

输入:

date_of_registration :`2074-08-15`
& bank_account_no: `6013820134824000000`

AllowanceImport 类模型函数如下:

   public function model(array $row)
        {
            return new Allowance([
                    'date_of_registration' => isset($row['date_of_registration'])?$row['date_of_registration']:'',
                    'bank_account_no'  => isset($row['bank_account_no'])?$row['bank_account_no']:'',
                ]);
        }

但是导入后问题就来了。日期显示为

string
,数字显示为
scientific notation
。数据显示如下:

输出:

date_of_registration : 63781
bank_account_no : 6.013820134824E+18

需要输入:

date_of_registration :`2074-08-15`
& bank_account_no: `6013820134824000000`
php excel laravel
1个回答
0
投票

您在 Laravel Excel 中遇到的问题与其在导入过程中处理日期和大数字的方式有关。以下是如何解决它以匹配您所需的输出格式:

1。格式化日期:

默认情况下,Laravel Excel 从 Excel 文件中读取日期作为时间戳。要将它们转换为您喜欢的格式 (

YYYY-MM-DD
),您可以在
Carbon
函数中使用 PHP 的
model
类。

这是更新后的代码:

public function model(array $row)
{
    if (isset($row['date_of_registration'])) {
        $date = Carbon::parse($row['date_of_registration']);
        $row['date_of_registration'] = $date->format('Y-m-d');
    }

    return new Allowance($row);
}

此代码检查行数据中是否存在

date_of_registration
键。如果是,它会使用 Carbon 解析该值,然后根据您所需的格式对其进行格式化 (
Y-m-d
)。

2。处理大数:

Laravel Excel 可以以科学记数法导入 Excel 中的大数字。为了防止这种情况,您可以在

model
函数中将值显式转换为字符串。

这是更新后的代码:

public function model(array $row)
{
    if (isset($row['bank_account_no'])) {
        $row['bank_account_no'] = (string) $row['bank_account_no'];
    }

    // ... rest of your code
}

此代码检查

bank_account_no
键是否存在,然后将值转换为字符串。这确保它被视为字符串而不是转换为科学记数法。

记住:

  • 确保您使用 Composer 安装了 Carbon:
    composer require carbon/carbon
  • 这些更改会在创建新的Allowance 实例之前修改数据。

通过实施这些调整,您导入的数据应与所需的格式相匹配,并具有格式正确的日期和大数字的字符串值。

© www.soinside.com 2019 - 2024. All rights reserved.