لارافيل, Model / 2024-07-18

مراقبة التغيرات على Model في لارافيل بإستخدام الدوال WasCreated, IsDirty , wasRecentlyCreated

مراقبة التغيرات على Model في لارافيل بإستخدام الدوال WasCreated, IsDirty , wasRecentlyCreated

2024-07-18 وقت القراءه : 1 دقائق

ببعض الأحيان نحتاج لمعرفة أي تغير يحدث على الـ model من حيث إنشاء سجلات أو التعديل عليها، ففرضا لو لدينا جدول المستخدمين، وعند إضافة مستخدم نريد معرفة هل تمت إضافة هذا المستخدم أو إنه موجود

$user=User::firstOrCreate(
    ['email'=>'ethartest@gmail.com'],
    ['name'=>'ethar', 'password'=>bcrypt('password')],
);

كما نلاحظ أنه يمكن لنا الإستعانة بالدالة الرائعة التي توفرها laravel eloquent وهي firstOrCreate عند إنشاء سجلات جديده، فإذا كان البريد الإلكتروني ethartest@gmail.com موجود سيتم إعادة هذا السجل، أما إذا لم يكن موجود فسيتم إنشاؤه في قاعدة البيانات، إلا إنه يوجد مجموعة من الدوال المساعدة الأخرى التي توفرها لارافيل مثل wasRecentlyCreated, isDirty, wasChanged.


wasRecentlyCreated

$user=User::firstOrCreate(
    ['email'=>'ethartest@gmail.com'],
    ['name'=>'ethar', 'password'=>bcrypt('password')],
);
echo $user->wasRecentlyCreated ? 'Created' : 'Found';

هنا الدالة wasRecentlyCreated ستقوم بإرجاع Created إذا تم إنشاء السجل، أما إذا كان السجل موجود في قاعدة البيانات فسيتم إرجاع Found.


isDirty

نستخدمها لمعرفة أي تغيير أو تعديل على السجل

$user=User::firstOrCreate(
    ['email'=>'ethartest@gmail.com'],
    ['name'=>'ethar', 'password'=>bcrypt('password')],
);
$user->name = 'Ethar Shrouf';
echo $user->isDirty() ? 'Edited' : 'Undefined';

كما نلاحظ أنه إذا كان البريد الإلكتروني موجود وتم عمل تعديل عليه، ونريد معرفة هل حدث أي تغيير يمكن لنا إستخدام isDirty، فإذا تم التعديل سيتم إرجاع Edited أما إذا لم يحدث تغيير، سيتم إرجاع Undefined.

كما يمكن لنا تحديد ذلك على حقول معينة

echo $user->isDirty('name') ? 'Name Edited' : 'Name Not Updated';
echo '<br/>';
echo $user->isDirty('email') ? 'Email Edited' : 'Email Not Updated';


wasChanged

كما نلاحظ في الدالة isDirty راقبنا التغيرات لكن دون عمل Save للبيانات، أما إذا أردنا أن نراقب التغيرات في البيانات التي تم حفظها نستخدم wasChanged

$user=User::firstOrCreate(
    ['email'=>'ethartest@gmail.com'],
    ['name'=>'ethar', 'password'=>bcrypt('password')],
);

$user->name = 'Ethar Shrouf';
$user->save();
echo $user->wasChanged() ? 'Changed' : 'UnChanged';
echo '<br/>';
echo $user->wasChanged('name') ? 'Name Edited' : 'Name Not Updated';
echo '<br/>';
echo $user->wasChanged('email') ? 'Email Edited' : 'Email Not Updated';


إضافة تعليق
Loading...