Я новичок в Laravel.
Я хочу добавить временную метку для всех действий вставки в Laravel, используя настраиваемое имя поля, например ct
и не используя updated_at
.
Я придумал ниже, но без везения. Все мои таблицы имеют поле 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'; const UPDATED_AT = null; public $timestamps = false; public static function boot() { parent::boot(); static::creating(function ($model) { $model->ct = $model->freshTimestamp(); }); } }
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
.
Вы можете видеть, что делает Eloquent в коде Model@performInsert
и Model@performUpdate
.