Laravel & Eloquent 模型设置 created_at 和 updated_at

###1、设置默认字段
数据入库时一般都需要创建时间和修改时间,不想每次都在业务中填写,怎么办?创建一个BaseModel,BaseModel继承Eloquent/Model,自定义create_at、update_at字段,其他Model继承BaseModel即可

use Illuminate\Database\Eloquent\Model;

class BaseModel extends Model
{
    const CREATED_AT = 'create_time';
    const UPDATED_AT = 'modify_time';

}

###2、不需要记录修改时间怎么设置
最近做日志业务,只需要 created_at 字段就可以了,数据库不想添加 updated_at 字段。下面是解决方法:

解决方法
查看 Illuminate\Database\Eloquent\Model 后发现,有这样一行代码 use Concerns\HasTimestamps ,接下找到 trait HasTimestamps 看到 如下代码:

    protected function updateTimestamps()
    {
        $time = $this->freshTimestamp();

        if (! is_null(static::UPDATED_AT) && ! $this->isDirty(static::UPDATED_AT)) {
            $this->setUpdatedAt($time);
        }

        if (! $this->exists && ! $this->isDirty(static::CREATED_AT)) {
            $this->setCreatedAt($time);
        }
    }

    /**
     * Set the value of the "updated at" attribute.
     *
     * @param  mixed  $value
     * @return $this
     */
    public function setUpdatedAt($value)
    {
        $this->{static::UPDATED_AT} = $value;

        return $this;
    }

源码逻辑很简单,直接在对应的Model 中设置 const UPDATED_AT = null 就可以了。

本作品采用《CC 协议》,转载必须注明作者和本文链接
tinyzhe
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!