Метод withoutEvents
Метод withoutEvents применяется к экземпляру модели Eloquent и позволяет временно отключить все события для последующих операций. Метод принимает замыкание, внутри которого выполняются операции без генерации событий модели. Это полезно при массовых обновлениях, импорте данных или в ситуациях, когда события могут вызвать нежелательные побочные эффекты.
Синтаксис
<?php
$model->withoutEvents(function () {
// Operations without events
});
?>
Пример
Давайте обновим все статьи, установив им статус 'archived', без запуска событий updating и updated:
<?php
use AppModelsArticle;
$article = Article::find(1);
$article->withoutEvents(function () use ($article) {
$article->update(['status' => 'archived']);
});
echo $article->status;
?>
Результат выполнения кода:
"archived"
Пример
Давайте выполним несколько операций внутри одного замыкания, отключив события для всех изменений:
<?php
use AppModelsArticle;
$article = Article::find(2);
$result = $article->withoutEvents(function () use ($article) {
$article->title = 'Updated title';
$article->status = 'draft';
$article->save();
return 'Operations completed without events';
});
echo $result;
?>
Результат выполнения кода:
"Operations completed without events"
Пример
Давайте создадим новую статью без запуска событий creating и created:
<?php
use AppModelsArticle;
$article = new Article();
$article->title = 'New article';
$article->status = 'pending';
$article->withoutEvents(function () use ($article) {
$article->save();
});
echo "Article created with ID: " . $article->id;
?>
Результат выполнения кода:
"Article created with ID: 5"
Смотрите также
-
метод
saveQuietly,
который сохраняет модель без запуска событий -
метод
deleteQuietly,
который удаляет модель без запуска событий -
метод
withoutTimestamps,
который отключает автоматическое обновление временных меток -
метод
update,
который обновляет модель в базе данных