Laravel 5.2中created_at和updated_at字段中的DateTime错误

时间:2016-04-25 05:04:30

标签: php mongodb laravel-5.2

我正在使用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 = [];
}

enter image description here

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

1 个答案:

答案 0 :(得分:2)

实际上 - 使用jenssegers/Laravel-MongoDB包时 - 保存新模型对象时会自动设置 created_at updated_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对象(即内部日期时间mongo rep)。