我是Laravel的新手。
我想使用自定义字段名称(例如ct
)而不是使用updated_at
为Laravel中的所有插入操作添加时间戳。
我在下面想出来,但没有运气。我所有的桌子都有ct
字段和not null
属性。
class ProductLog extends Model
{
const CREATED_AT = 'ct';
public $timestamps = false;
public static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->created_at = $model->freshTimestamp(); => 1)
$model->setCreatedAt($model->freshTimestamp()); => 2)
});
}
}
1)和2)都仍然抛出一个错误,说'ct'没有默认值。
任何建议或意见将不胜感激。
先感谢您。
我刚刚测试了它,它完美地工作:
const UPDATED_AT = null;
const CREATED_AT = 'ct';
没有必要做任何其他事情。使用此解决方案,Laravel将使用ct
作为created_at
,并且不会将updated_at
添加到任何更新查询。
class ProductLog extends Model
{
const CREATED_AT = 'ct';
public function setUpdatedAt($value)
{
return $this;
// this method does nothing now
}
}
Eloquent将在插入时为你设置created_at
(ct
)字段[就像$timestamps = true;
时那样]并且现在无法设置update_at
字段。
您可以在代码Model@performInsert
和Model@performUpdate
中看到Eloquent正在做什么。
尝试:
class ProductLog extends Model
{
const CREATED_AT = 'ct';
const UPDATED_AT = null;
public $timestamps = false;
public static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->ct = $model->freshTimestamp();
});
}
}