Метод deleteQuietly
Метод deleteQuietly применяется к экземпляру модели Eloquent
и выполняет удаление записи из базы данных без запуска событий
deleting и deleted. В отличие от стандартного метода
delete, который инициирует события, этот метод позволяет
выполнить удаление в обход всех обработчиков событий, что может
быть полезно для массовых операций или когда нужно избежать
побочных эффектов. Метод возвращает bool - результат
выполнения операции удаления.
Синтаксис
<?php
$model->deleteQuietly();
?>
Метод не принимает параметров и возвращает true
в случае успешного удаления или false
в случае неудачи.
Пример
Давайте удалим статью с идентификатором 5 без запуска событий:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
class ArticleController extends Controller
{
public function deleteArticle()
{
$article = Article::find(5);
if ($article) {
$res = $article->deleteQuietly();
if ($res) {
echo "Article deleted successfully without events";
} else {
echo "Failed to delete article";
}
} else {
echo "Article not found";
}
}
}
?>
Результат выполнения кода:
"Article deleted successfully without events"
Пример
Сравним работу методов delete и deleteQuietly
с использованием событий модели:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Article extends Model
{
protected static function booted()
{
static::deleting(function ($article) {
echo "Deleting article: " . $article->id;
});
static::deleted(function ($article) {
echo "Article deleted: " . $article->id;
});
}
}
?>
<?php
namespace App\Http\Controllers;
use App\Models\Article;
class ArticleController extends Controller
{
public function compareDeleteMethods()
{
// Using standard delete method - events will be triggered
$article1 = Article::find(1);
if ($article1) {
$article1->delete();
}
// Using deleteQuietly method - events will not be triggered
$article2 = Article::find(2);
if ($article2) {
$article2->deleteQuietly();
}
echo "Both operations completed";
}
}
?>
Результат выполнения кода:
"Deleting article: 1"
"Article deleted: 1"
"Both operations completed"
Как видно из примера, при использовании deleteQuietly
события не запускаются, в отличие от метода delete.
Пример
Использование метода deleteQuietly в цикле
для массового удаления записей:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
class ArticleController extends Controller
{
public function deleteOldArticles()
{
$oldArticles = Article::where('created_at', '<', now()->subYear())->get();
$deletedCount = 0;
foreach ($oldArticles as $article) {
if ($article->deleteQuietly()) {
$deletedCount++;
}
}
echo "Deleted $deletedCount old articles without events";
}
}
?>
Результат выполнения кода:
"Deleted 15 old articles without events"
Смотрите также
-
метод
delete,
который удаляет модель с запуском событий -
метод
forceDelete,
который принудительно удаляет модель из базы данных -
метод
restore,
который восстанавливает мягко удалённые модели -
метод
saveQuietly,
который сохраняет модель без запуска событий