آموزش Soft Deleting در لاراول

آموزش Soft Deleting در لاراول

در لاراول قابلیتی اضاف شده است بنام Soft Deleting، با استفاده از این روش در واقع ردیف های شما از دیتابیس حذف نخواهند شد اما در هنگام نمایش بصورت عادی نمایش داده نخواهند شد! 

همانطور که می دانید لاراول یکی از فریم‎ ورک‎ های زبان  PHP است می باشد که برپایه MVC برای توسعه اپلیکیشن ‎های وب در نظر گرفته شده است.

لاراول از یک ORM بسیار قوی بنام Eloquent  برای کار با دیتابیس بهره می برد.

شما با استفاده از Eloquent می توانید به راحتی مدل های خود را Insert, select,Update و حتی delete کنید.

همانطور که می دانید هنگامی که ما یک ردیف را با استفاده از دستور delete() حذف می کنیم، آن ردیف بصورت کلی از دیتابیس پاک خواهد شد.

اما در لاراول قابلیتی اضاف شده است بنام Soft Deleting، با استفاده از این روش در واقع ردیف های شما از دیتابیس حذف نخواهند شد اما در هنگام نمایش بصورت عادی نمایش داده نخواهند شد! 

شاید برای شما کمی گیج کننده باشد، اما نگران نباشید و تا انتهای این مطلب همراه ما باشید.

فرض کنید مدلی بنام Article داریم

حال می خواهیم article با ای دی برابر 1 را از دیتابیس حذف کنیم:

Article::destroy(1);

با فراخوانی کد بالا مطلب با ای دی شماره 1 بصورت کلی از دیتابیس حذف خواهد شد.

اما ما نمی خواهیم مطلب بصورت کلی حذف شود و تنها می خواهیم مطلب در لیست نمایش مطالب نمایش داده شود. پس راه حل چیست؟

راه حل استفاده از Soft Deleting در لاراول می باشد.

برای ایجاد قابلیت Soft Deleting در یک مدل مراحل زیر را انجام دهید:

ابتدا تریت SoftDeletes را همانند زیر در مدلی که میخواهید Soft Deleting روی آن فعال باشد use کنید:

 

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Flight extends Model
{
    use SoftDeletes;
}

تریت SoftDeletes بصورت خودکار ویژگی deleted_at  را به نمونه ساخته شده از مدل شما می دهید. 

حال باید در جدول مدل خود ردیفی بنام deleted_at با نوع timestamp  ایجاد نمایید.

شما همچنین می توانید با کمک migration و با افزودن کد زیر، در هنگام ایجاد migrate دریف deleted_at را به جدول مدل خود اضاف نمایید:

Schema::table('flights', function (Blueprint $table) {
    $table->softDeletes();
});

 

حال همه چیز تمام است!

حالا شما هر وقت متد حذف را فراخوانی کنید بصورت خودکار مقدار ستون deleted_at  بر روی زمان فعلی ذخیره خواهد شد و از این پس هنگام فراخونی مدل مربوطه ردیف حذف شده با اینکه در دیتابیس موجود می باشد اما در نتایج نمایش داده نخواهد شد.

 

حال ممکن است شما بخواهید مدل های(ردیف های ) حذف شده دریک مجموعه نمایش دهید، برای اینکار شما می توانید با استفاده از روش زیر اقدام کنید:

$article = App\Article::withTrashed()
->where('status', 1)
->get();

 

برای مثال با اجرای دستور بالا تمام article هایی که بصورت soft حذف شده اند و status آنها برابر 1 می باشد بر خواهند گشت.

 

حذف دائمی ردیف هایی که با استفاده از soft Deleteing حذف شده اند:

گاهی مواقع نیز ممکن است شما نیاز داشته باشد یک ردیف را که بصورت Soft حذف کرده اید، بصورت کلی از پایگاه داده خود حذف کنید، برای اینکار می توانید بصورت زیر از متد forceDelete اسفتاده نمایید:

$article->forceDelete();

با اجرای کد بالا تمامی ردیف هایی از مدل Article که بصورت soft حذف شده بودند از دیتابیس حذف خواهند شد.

 

امیدوارم از این آموزش هم لذت برده باشید.

درصورتی که سوالی یا پیشنهادی دارید از بخش نظرات ارسال کنید.


دسته بندی ها:

لاراول

ارسال نظر

برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *

ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *

اگر نظری برای این مطلب ارسال شد از طریق ایمیل مرا اطلاع بده!
لسیت نظرات
هنوز برای این مطلب نظری ارسال نشده است!