导入 csv excel 文件时,Laravel 7 时间戳迁移始终返回 0000-00-00 00:00:00

Posted

技术标签:

【中文标题】导入 csv excel 文件时,Laravel 7 时间戳迁移始终返回 0000-00-00 00:00:00【英文标题】:Laravel 7 timestamp migration always return 0000-00-00 00:00:00 when importing a csv excel file 【发布时间】:2020-12-12 07:56:14 【问题描述】:

我搜索了所有相关文章,但没有解决方案。当我意识到时间戳不正确时,我正在为 Laravel 设置站点地图。所以这对 SEO 不利。

我在 mysql 数据库的 created_at 和 updated_at 字段中总是有那些 0。

我不确定这是 Laravel、SQL 还是 Excel 问题。

我做什么:

在我的本地主机中迁移我在 laravel 中的表 $table->timestamps(); 也试过了,但没有
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->useCurrent();
$timestamps = false;
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));

我从本地主机导入服务器 phpmyadmin 中的 sql 数据库

并在phpmyadmin中导入excel csv文件和数据。

也许还有另一种方法可以正确地做到这一点?

【问题讨论】:

在您的 MySQL 表中,该列是否正常工作? 是的,但从 csv 导入时全部为零 确保日期格式为日期格式:Ymd H:i:s 或者您可以使用控制器进行插入,并且 $timestamp = date('Ymd H:i:s ');测试 MySql 列是否设置成功。如果您的格式不正确,它将显示那些 0。 是的,我确实解决了这个问题。迁移表时的 Laravel 设置不正确。我必须使用 maatwebsite 手动导入数据才能正确显示日期。但我会在下次做笔记。我还为我的表的所有 id 手动添加主键和自动增量。所以从 laravel 7 迁移似乎有一些问题。总之谢谢 没问题,祝你好运! 【参考方案1】:

如果您使用的是maatwebsite/excel,并且如果您同样通过迁移创建了时间戳,那么模型会自动插入时间戳。

    $table->timestamps();

注意:确保您的表列 created_at 不存在于模型的可填充数组中,并且您没有使用文档中提到的 WithUpserts 方法。 见:https://docs.laravel-excel.com/3.1/imports/model.html

protected $fillable = [
         'users_id',
         'name',
         'created_at' //it should not be here
]

使用碳的另一种方法

您必须通过使用碳来添加时间戳。

首先将 created_at 添加到模型的可填充数组中

 protected $fillable = [
          
             'name',
             'created_at' //must be present
    ]  

然后你必须使用碳,进入你的导入文件夹并在你的导入文件中,带来下面标有 cmets 的更改。

 <?php

namespace App\Imports;
use Carbon\Carbon; //add this line of code

use App\User;
use Illuminate\Support\Facades\Hash;
use Maatwebsite\Excel\Concerns\ToModel;

class UsersImport implements ToModel

    /**
     * @param array $row
     *
     * @return User|null
     */
    public function model(array $row)
    
        return new User([
           
           'created_at'=> now(),  //add this line of code
           'name'     => $row[0],
         

        ]);
    

注意: 它也适用于 upserts,在 upserts 中,maatwebsite 无法添加时间戳,它会为 null,但是通过上述方法,您可以存储时间戳,您可以对 updated_at 使用相同的方法。

【讨论】:

以上是关于导入 csv excel 文件时,Laravel 7 时间戳迁移始终返回 0000-00-00 00:00:00的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 5 中使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能(转)

Laravel Excel 实现 Excel-CSV 文件导入导出功能

Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解

使用 Laravel Excel 实现 Excel/CSV 文件导入导出功能

Laravel Excel - 导入日期验证

laravel框架excel 的导入导出功能