自定义created_at并仅使用自定义created_at

问题描述 投票:1回答:3

我是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'没有默认值。

任何建议或意见将不胜感激。

先感谢您。

php laravel laravel-5
3个回答
2
投票

我刚刚测试了它,它完美地工作:

const UPDATED_AT = null;
const CREATED_AT = 'ct';

没有必要做任何其他事情。使用此解决方案,Laravel将使用ct作为created_at,并且不会将updated_at添加到任何更新查询。


1
投票
class ProductLog extends Model
{
    const CREATED_AT = 'ct';

    public function setUpdatedAt($value)
    {
        return $this;
        // this method does nothing now
    }
}

Eloquent将在插入时为你设置created_atct)字段[就像$timestamps = true;时那样]并且现在无法设置update_at字段。

您可以在代码Model@performInsertModel@performUpdate中看到Eloquent正在做什么。


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();
        });
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.