答案 0 :(得分:5)
Eloquent处理updateTimestamps()
中的时间戳:
protected function updateTimestamps()
{
$time = $this->freshTimestamp();
if ( ! $this->isDirty(static::UPDATED_AT))
{
$this->setUpdatedAt($time);
}
if ( ! $this->exists && ! $this->isDirty(static::CREATED_AT))
{
$this->setCreatedAt($time);
}
}
您只需在模型中覆盖此功能,然后移除updatedAt
部分:
protected function updateTimestamps()
{
$time = $this->freshTimestamp();
if ( ! $this->exists && ! $this->isDirty(static::CREATED_AT))
{
$this->setCreatedAt($time);
}
}
或者您可以覆盖setUpdatedAt
,但您可能希望将其保留为故意设置值:
public function setUpdatedAt($value)
{
// do nothing
}
答案 1 :(得分:0)
实现上述方法的一种方法是改变模型事件。将以下方法添加到模型中。
public static function boot()
{
public $timestamps = false;
parent::boot();
static::creating(function($model) {
$dateTime = new DateTime;
$model->created_at = $dateTime->format('m-d-y H:i:s');
return true;
});
static::updating(function($model) {
$dateTime = new DateTime;
$model->updated_at = $dateTime->format('m-d-y H:i:s');
return true;
});
}
现在您可以访问创建和更新模型事件。在这些事件中,您可以按照自己的意愿行事,在您的情况下,您可以更改时间戳。有关模型事件的更多信息,请参阅Laravel文档Model Events
答案 2 :(得分:0)
开箱即用功能的全部或全部。
复制created_at
的功能,您可以使用雄辩的事件。对于您的每个型号,您可以执行以下操作
class MyModel extends Eloquent
{
protected $timestamps = false;
public static function boot()
{
parent::boot();
static::creating(function($model)
{
$model->created_at = Carbon::now();
});
}
}
每次创建新模型时,都会使用Carbon将created_at
列设置为当前时间。