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 协议》,转载必须注明作者和本文链接
推荐文章: