Метод withoutTimestamps
Метод withoutTimestamps применяется к экземпляру модели Eloquent и позволяет выполнить операцию сохранения или обновления без автоматической установки значений в поля created_at и updated_at. Это полезно, когда необходимо сохранить данные, но оставить временные метки без изменений, например, при импорте старых данных или обновлении записей без изменения времени последнего изменения.
Метод принимает замыкание (callback) в качестве единственного аргумента. Внутри замыкания выполняются все операции с моделью, при этом автоматическое обновление временных меток отключается только на время выполнения этого замыкания. После завершения работы замыкания поведение модели восстанавливается.
Важно отметить, что withoutTimestamps не отключает поля временных меток полностью, а лишь предотвращает их автоматическое обновление. Если вы явно укажете значения для created_at или updated_at внутри замыкания, эти значения будут сохранены.
Синтаксис
<?php
$model->withoutTimestamps(function () {
// Операции без обновления меток
});
?>
Пример
Давайте обновим статью, не изменяя поле updated_at:
<?php
use AppModelsArticle;
$article = Article::find(1);
$article->withoutTimestamps(function () use ($article) {
$article->title = 'New title';
$article->save();
});
echo $article->title . ' updated_at: ' . $article->updated_at;
?>
Результат выполнения кода:
"New title updated_at: 2024-01-15 10:00:00"
Пример
Выполним массовое обновление нескольких записей без изменения временных меток:
<?php
use AppModelsArticle;
$articles = Article::where('status', 'draft')->get();
foreach ($articles as $article) {
$article->withoutTimestamps(function () use ($article) {
$article->status = 'archived';
$article->save();
});
}
echo count($articles) . ' articles updated';
?>
Результат выполнения кода:
"5 articles updated"
Пример
Используем метод withoutTimestamps с методом update для обновления нескольких полей:
<?php
use AppModelsArticle;
$article = Article::find(2);
$article->withoutTimestamps(function () use ($article) {
$article->update([
'title' => 'Updated title',
'content' => 'New content'
]);
});
echo 'Title: ' . $article->title . ' updated_at: ' . $article->updated_at;
?>
Результат выполнения кода:
"Title: Updated title updated_at: 2024-01-15 10:00:00"
Смотрите также
-
метод
touch,
который принудительно обновляет временные метки модели -
метод
saveQuietly,
который сохраняет модель без запуска событий -
метод
update,
который обновляет модель в базе данных -
атрибут
timestamps,
который включает или отключает временные метки для модели