我是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'没有默认值。
任何建议或建议都将不胜感激。
提前谢谢。
答案 0 :(得分:2)
我刚试过这个并且它完美无缺:
const UPDATED_AT = null;
const CREATED_AT = 'ct';
没有必要做任何其他事情。使用此解决方案,Laravel将ct
用作created_at
,并且不会将updated_at
添加到任何更新查询。
答案 1 :(得分:1)
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正在做什么。
答案 2 :(得分:0)
尝试:
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();
});
}
}