【问题标题】:Wrong DateTime in created_at and updated_at fields in Laravel 5.2Laravel 5.2 中 created_at 和 updated_at 字段中的错误日期时间
【发布时间】:2016-04-25 05:04:29
【问题描述】:

我正在使用 jenssegers mongodb 我正在尝试将 created_at 和 updated_at 保存在我的控制器中,

"updated_at" : ISODate("1970-01-11T19:45:21.925Z"),
"created_at" : ISODate("1970-01-11T19:45:21.925Z")

即使是更新,也会保存错误的日期

在我的 app.php 中

在别名中

'Moloquent' => 'Jenssegers\Mongodb\Eloquent\Model',

在提供者中

'Jenssegers\Mongodb\Auth\PasswordResetServiceProvider',

在我的模型中

use Moloquent;

class Task extends Moloquent{
      //$fillables = [];
}

请帮我解决问题 提前致谢!

【问题讨论】:

  • 你在使用jenssegers/Laravel-MongoDB 包吗?另外,为什么要手动设置 created_at 和 updated_at (因为它是在创建时自动设置的)?
  • 在 insert 中注释了 created_at 和 updated_at,并保存在 db "updated_at" : ISODate("1970-01-15T17:25:44.107Z"), "created_at" : ISODate("1970-01- 15T17:25:44.107Z") 无法获取数据,以及日期错误的原因@felipsmartins
  • 为什么要手动设置 created_at 和 updated_at?
  • 我其实不知道他们会自动创建,所以我做到了。谢谢
  • 另外,请告诉我为什么我的日期在数据库 ISODate("1970-01-15T17:25:44.107Z") 我想更新相同的记录。更新时是否需要 updated_at?请告诉

标签: php mongodb laravel-5.2


【解决方案1】:

实际上 - 当使用 jenssegers/Laravel-MongoDB 包时 - created_atupdated_at 属性会在保存新模型对象时自动设置。

但是,如果您仍想手动设置时间戳或其他任何日期时间字段,则必须将 DateTime 对象(或 Carbon)转换为 MongoDB\BSON\UTCDateTime

所以应该是这样的:

$myModel = new MyModel();
$myModel->created_at = $myModel->fromDateTime(new \DateTime());
//...

对于 created_at/updated_at 以外的另一个日期时间属性:

class Task extends Model
{
    protected  $collection = 'tasks';

    protected $duedate;

    protected  $dates = ['duedate'];

    /** Mutator */
    public function setDuedateAttribute($value)
    {
        /** @var \MongoDB\BSON\UTCDateTime */
        $this->attributes['duedate'] = $this->fromDateTime(
            \DateTime::createFromFormat('d/m/Y H:i', $value . '00:00'));
    }
}

Jenssegers\Mongodb\Eloquent::fromDateTime() 可用于任何模型实例,因为它继承自父模型(参见github)。此方法将 DateTime 转换为可存储的 UTCDateTime 对象(即内部 datetime mongo 代表)。

【讨论】:

  • Jenssegers\Mongodb\Eloquent::fromDateTime(),我应该在哪里添加这个?
  • 感谢您的帮助。但是你能帮我得到确切的日期吗?我的日期保存为 1970-01-15
  • 请不要介意我在激怒你。您在模型中为到期日创建的 mutator。我不希望任何其他字段来保存日期。我在 created_at 和 updated_at 字段中保存日期。 github链接对我没有帮助。是否需要为 created_at 和 updated_at 创建 mutators?
  • @Gireesh 没关系! ;) 嗯...就像我之前说的 created_atupdated_at 属性在保存模型时会自动设置,所以你应该没有任何问题。
  • 它们正在自动保存,但日期错误。如何纠正?
猜你喜欢
  • 2019-01-22
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多