Eloquent 设置 updated_at 值与创建。霍能修吗?

Posted

技术标签:

【中文标题】Eloquent 设置 updated_at 值与创建。霍能修吗?【英文标题】:Eloquent set updated_at value with creating. Ho can fix it? 【发布时间】:2017-04-22 13:45:13 【问题描述】:

在 Eloquent 中实例化由两个时间戳建立的模型时 - created_at 和 updated_at 具有相同的值。但是根据创建标签时的逻辑应该确定是否已创建并且标签在下次升级时更新。如何解决?

Eloquent 5.2,db 中 created_at 和 updated_at 是整数(受保护的 $dateFormat = 'U')


UPDATE - 当我使用该方法时,属性 created_atupdated_at 仍然同时更新。那是第一个动作——创造,被设定为平等的。第二个动作——更新。同样,这两个字段都已更新,并且它们具有相同的值。

【问题讨论】:

你想达到什么目的? updated_at 在创建时刻设置为空 能举个代码例子吗? 抱歉,我犯了一个错误。在 set mysql 字段中设置更新事件。 但是,你能回答我吗 - 在创建行中 created_at 和 updated_at 必须具有相同的值或 updated_at 必须设置为空?这对你有什么作用?.. 【参考方案1】:

这就是 Laravel 有时做事的方式,不让 updated_at 为空也是一种避免非空约束问题的方法。但如果你愿意,你可以为你解决这个问题。您可能可以执行以下操作:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model as Eloquent;

class BaseModel extends Eloquent

    public function save(array $options = [])
    
        $saved = parent::save($options);

        if ($this->wasRecentlyCreated) 
            $this->updated_at = null;

            parent::save($options);
        

        return $saved;
    

并在所有模型中使用此 BaseModel

【讨论】:

以上是关于Eloquent 设置 updated_at 值与创建。霍能修吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何更新 Laravel Eloquent 管理的时间戳(created_at 和 updated_at)的时区?

禁用 Laravel 的 Eloquent 时间戳

Laravel 自定义 created_at 和 updated_at

Laravel 4.1在进行数据库save()时,会自动多出两个字段updated_at和created_at,如何取消

Laravel Eloquent 关系 keyBy()

使用 Eloquent 更新行时数据不持久