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

时间:2017-12-27 08:57:23

标签: php laravel laravel-5

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

任何建议或建议都将不胜感激。

提前谢谢。

3 个答案:

答案 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_atct)字段[就像$timestamps = true;时那样]并且现在无法设置update_at字段

您可以在代码Model@performInsertModel@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();
        });
    }
}