如何解决Laravel 7时间戳迁移在导入CSV Excel文件时始终返回0000-00-00 00:00:00
我搜索了所有相关文章,但没有解决方案。当我意识到时间戳不正确时,我正在为Laravel设置站点地图。因此,这对SEO不利。
我在MysqL数据库的created_at和Updated_at字段中总是有0。
我做什么:
- 在本地主机的laravel中迁移我的表
$table->timestamps();
也尝试过了,但没有尝试
$table->timestamp('created_at')->useCurrent();
$table->timestamp('updated_at')->useCurrent();
$timestamps = false;
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
也许还有另一种方法可以正确地做到这一点?
解决方法
如果您使用的是 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
]
然后您必须使用 carbon,转到您的导入文件夹并在您的导入文件中,进行以下标有注释的更改。
<?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 使用相同的方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。