Laravel & Lumen Eloquent 模型去掉 created_at 和 updated_at 其中一个
起因
最近在用Lumen做API接口开发,开发接口要记录日志,日志存放在数据库。因为是日志数据,只需要 created_at
字段就可以了,如果设置 $timestamps = false
, 两个都用不了,created_at 就需要自己手动设置了,如果不设置,数据库需要添加 updated_at
字段。下面是解决方法:
解决方法
查看 Illuminate\Database\Eloquent\Model
后发现,有这样一行代码 use Concerns\HasTimestamps
,接下找到 trait HasTimestamps
看到 如下代码:
public function setUpdatedAt($value)
{
$this->{static::UPDATED_AT} = $value;
return $this;
}
聪明的你应该已经知道怎么解决了吧。没错,就是在Model中设置 const UPDATED_AT = null
就可以了。
总结
遇到问题,先看文档,再尝试一下自己解决,最后去百度。
CreatePasswordResetsTable 这个migration 里面是这样写的 $table->timestamp('created_at')->nullable();
然后password_resets 表里面 确实是只有 created_at字段
傻不拉几的, 还发教程.
在Model中设置 const UPDATED_AT = null 就可以了.
你难道去vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php
这个文件中改源码呀.
@liux156 没改源码,是在新建的Model中设置 const UPDATED_AT = null
@Openset 受教了. 在我爆出口的情况下, 你还能耐心回复.
在你回复之前, 我一直都认为, 类常量就跟常量一样的, 一旦声明就不能修改.
现在才知道原来是可以修改的.
这么说来, 类常量, 跟静态变量是一样的.
@liux156 如果你需要自定义用于存储时间戳的字段名,可以在模型中通过设置 CREATED_AT 和 UPDATED_AT 常量来实现, 另外这种方式不推荐。
@Openset 为什么不推荐这种方法,开发中使用时间戳不是最灵活的吗?
@pengjianwei MySQL
created_at
、updated_at
添加 默认值就行了,updated_at
可以添加ON UPDATE CURRENT_TIMESTAMP
就可以了@liux156 类常量本来就是不能改的。本例中的类常量不是同一个,分别属于父类和子类。