我有一些数据要使用 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`
您在 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 require carbon/carbon
通过实施这些调整,您导入的数据应与所需的格式相匹配,并具有格式正确的日期和大数字的字符串值。