Laravel Eloquent ORM на українській: Частина 6 (Видалення моделей)

pic

Laravel Eloquent-у Видалення моделей використовується для видалення записів з бази даних. Це надає простий та ефективний спосіб видалення даних. Нижче наведено різні способи видалення моделей.

1. Видалення однієї моделі

Використання методу delete()

За допомогою методу delete() можна видалити певний запис з бази даних.

use App\\Models\\Post;
// Знайдіть запис  
$post = Post::find(1);// Видаліть  
$post->delete();

Примітка: Після видалення запис більше не буде в базі даних.

2. Видалення кількох записів

Використання методу delete() та where

Для видалення кількох записів використовують метод delete() із умовою where.

use App\\Models\\Post;
// Видаліть всі записи зі статусом 'draft'  
Post::where('status', 'draft')->delete();

3. Використання методу destroy()

За допомогою методу destroy() можна видаляти один або кілька записів.

use App\\Models\\Post;
// Видаліть один запис  
Post::destroy(1);// Видаліть кілька записів  
Post::destroy([2, 3, 4]);

Примітка: Метод destroy() використовує первинний ключ для видалення запису.

4. Обробка подій при видаленні

При видаленні моделі Eloquent тригеряться Model Events.

  • deleting подія: Тригериться перед видаленням запису.
  • deleted подія: Тригериться після видалення запису.
class Post extends Model  
{  
 protected static function booted()  
 {  
 static::deleting(function ($post) {  
 // Зробіть щось перед видаленням  
 Log::info('Запис видаляється: ' . $post->id);  
 });
static::deleted(function ($post) {  
 // Зробіть щось після видалення  
 Log::info('Запис видалено: ' . $post->id);  
 });  
 }  
}

5. Soft Deletes (м'яке видалення)

Що таке Soft Delete?

  • За допомогою м'якого видалення запис не видаляється фізично, а в колонці deleted_at зберігається час видалення.
  • Для використання м'якого видалення в моделі необхідно додати трейд SoftDeletes.
use Illuminate\\Database\\Eloquent\\SoftDeletes;
class Post extends Model  
{  
 use SoftDeletes; protected $dates = ['deleted_at'];  
}

М'яке видалення

use App\\Models\\Post;
// М'яке видалення  
$post = Post::find(1);  
$post->delete(); // Часова мітка додасться в колонку `deleted_at`

Відновлення м'яко видаленого запису

// Отримання м'яко видаленого запису  
$post = Post::withTrashed()->find(1);
// Відновлення  
$post->restore();

Повне видалення (Force Delete)

Для повного видалення м'яко видаленого запису використовується метод forceDelete().

$post->forceDelete(); // Запис буде повністю видалено

Запити до м'яко видалених записів

i) withTrashed()

Для отримання як м'яко видалених, так і не видалених записів:

$posts = Post::withTrashed()->get();

ii) onlyTrashed()

Для отримання тільки м'яко видалених записів:

$trashedPosts = Post::onlyTrashed()->get();

6. Пряме видалення через базу даних

За допомогою фасаду DB у Laravel можна видаляти записи безпосередньо за допомогою SQL запиту.

use Illuminate\\Support\\Facades\\DB;
// Прямий SQL запит  
DB::table('posts')->where('status', 'draft')->delete();




Перекладено з: [Laravel Eloquent ORM in Bangla Part-6 (Deleting Models)](https://medium.com/@info.sontus/laravel-eloquent-orm-in-bangla-part-6-deleting-models-f4610c7969b2)

Leave a Reply

Your email address will not be published. Required fields are marked *