اذهب إلى المحتوى
  • 0

الحذف الناعم في laravel

Mahmoud Alrashidi

السؤال

Recommended Posts

  • 0

في الحذف الناعم أو soft delete عند حذف نموذج ما ، لا تتم إزالته بالفعل من قاعدة البيانات الخاصة بك. بدلاً من ذلك ، يتم تعيين الطابع الزمني delete_at على السجل. وبذلك تمكّنك لارافيل من استعادة البيانات فيما بعد.
لتمكين عمليات الحذف الناعمة لنموذج ، حدد خاصية softDelete على النموذج، مثال:
عند كتابة ملفات التهجير، نضيف الحقل softDeletes كالتالي:

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Database\Migrations\Migration;


class CreateItemsTable extends Migration

{


    public function up()

    {

        Schema::create('items', function(Blueprint $table) {

            $table->increments('id');

            $table->string('title');

            $table->text('description');

            $table->softDeletes();

            $table->timestamps();

        });

    }


    public function down()

    {

        Schema::drop("items");

    }

}

ثم عند تعريف المودل item نقوم باستخادم use softDeletes كالتالي:

namespace App;


use Illuminate\Database\Eloquent\Model;

use Illuminate\Database\Eloquent\SoftDeletes;


class Item extends Model

{

    use SoftDeletes;


    public $fillable = ['title','description'];


    protected $dates = ['deleted_at'];


}

والآن، عند استرجاع بيانات محددة، ستقوم لارافيل بإعادة السجلات فقط التي تحوي القيمة null ضمن العمود deleted_at، أي بمعنى آخر سيتم إهمال أي سجلات تحوي قيم ضمن الحقل deleted_at وكأنها غير موجودة، ولكن يمكنك بأي وقت الرجوع إلى قاعدة البيانات ورؤيتها حيث لن يتم حذفها بشكل نهائي:
مثلاً عند تنفيذ الأمر التالي:

$data = Item::get();

ستعيد كافة الحقول التي قيمة deleted_at فيها هي null
أما لاستعادة كافة السجلات (المحذوفة والغير محذوفة) عندها يجب أن تستعمل الأمر التالي:

$data = Item::withTrashed()->get();

إذاً، الفائدة هنا هي عند وجود بعض السجلات التي ترغب بعدم حذفها نهائياً من قاعدة البيانات وحتى لا يتم استرجاعها عند كل عملية جلب للبيانات من القاعدة يمكنك استخدام تقنية الحذف الناعم وبالتالي ستبقى ضمن قاعدة البيانات ويمكنك الرجوع إليها عند الضرورة ولكن لن يتم استرجاعها إلا عندما ترغب بذلك. وهذا مفيد جداً لأنه يحسّن من الأداء والسرعة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

يُمكن إستخدام eloquent لحذف السجلات بشكل ناعم، عند الحذف الناعم للسجل، لن تُحذف السجلات فعليًّا، وإنما ستُعيّن الخاصية deleted_at على السجل وتُحفظ في قاعدة البيانات. في حال كان السجل يملك قيمة deleted_at غير فارغة non-null، هذا يعني أنه قد حُذف. لتمكين الحذف الناعم لسجل ما نضيف ال trait SoftDeletes للمودل الذي نريد أن يُطبق الحذف الناعم:

<?php

namespace App\Models;

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

class User extends Model
{

   use SoftDeletes;

}

و نضيف العمود deleted_at لملف التهجير الخاص بالمودل:

<?php

Schema::table('users', function ($table) {

  // other fields
  $table->softDeletes();
});

بهذا الشكل عند إستخدام التابع delete على أي كائن من الصنف User:

<?php

$user = User::find(1);
$user->delete();

لن يتم حذفه فعلياً بل سيتم تعديل السجل بتعديل قيمة deleted_at إلى التاريخ الذي تم حذف السجل فيه. و سيبقى في قاعدة البيانات، و عند الإستعلام على المُستخدمين:

<?php

$users = User::all();

لن تظهر السجلات المحذوفة بشكل ناعم مع السجلات الكلية.

هناك عدة توابع أخرى يُمكن إستخدامها لمعرفة ما إذا كان سجل ما محذوف بشكل ناعم، او جلب السجلات المحذوفة ناعماً بالإضافة إلى عملية إسترجاع هذه السجلات يُمكنك الإطلاع عليها من خلال توثيق موسوعة حسوب: الحذف الناعم (Soft Deleting)

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

الحذف الناعم أو soft delete هي نوع من أنواع حذف البيانات ولكن بدل من التخلص من البيانات بشكل تام يتم إخفائه والاحتفاظ بالبيانات في الجداول لديك. ويتم ذلك عن طريق إضافة عمود جديد في الجدول باسم deleted_at أو أي اسم تريده ولكن هذا هو المتعارف عليه, حيث يكون فارغاً أو null بالوضع الطبيعي ولكن عن تطبيق ال soft delete على أحد العناصر يتم إضافة تاريخ الحذف في deleted_at.

ويمكن تفعيل هذه الميزة عن طريق إضافة Trate

use SoftDeletes;

بداخل ال Model المراد تطبيق هذه الخاصية عليها وكذلك بداخل الجدول أو migration الخاص بهذا ال Model نضيف

$table->softDeletes();

حتى يضيف العمود deleted_at بنوع date على هذا الجدول. وهكذا تضاف الحذف الناعم لدينا.

ويترتب على هذه الميزة أنه في حال كانت هنالك بيانات محذوفة بالطريقة الناعمة فلا يمكنك إستدعائها بالطريقة العادية مثلاً:

Product::all();

فيجب أن تضيف عليها الدالة withTrashed كما يلي:

Product::withTrashed()
  ->get();

هذا في حال كنت تريد تضمين البيانات الغير محذوفة مع البيانات المحذوفة حذفاً ناعماً, أما إذا كنت تريد فقط البيانات المحذوفة بشكل ناعم نستخدم:

Product::onlyTrashed();

وفي حال كنت تريد إستعادة إحدى البيانات من كونها محذوفة بطريقة ناعمة نستخدم الدالة restore كالتالي:

$product = Product::withTrashed()->where('id', 1)->restore();

وأي معلومات إضافية يمكننا مساعدتك بها ولكن يمكن التوجه أيضاً إلى التوثيق الرسمي للارافيل.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...