Amir Alsaeed نشر 18 مارس 2021 أرسل تقرير نشر 18 مارس 2021 لدي جدول للمستخدمين user وأرغب عند حذف مستخدم ما من الجدول: $user->delete(); أن يقوم تلقائياً بحذف الصور المرتبطة بهذا المستخدم مثلاً: $this->photo()->delete(); كيف يمكنني تنفيذ ذلك بشكل تلقائي دون الحاجة لكتابة العملية الثانية بشكل يدوي؟ اقتباس
0 سمير عبود نشر 18 مارس 2021 أرسل تقرير نشر 18 مارس 2021 يُمكنك إضافة قيد على مُستوى قاعدة البيانات في جدول photos: في الإصدارات القديمة: $table->unsignedInteger('user_id'); $table->foreign('user_id') ->references('id') ->on('users') ->onDelete('cascade');; في الإصدارات الحديثة تم إختصار العملية بهذا الشكل: $table->foreignId('user_id') ->constrained() ->onDelete('cascade'); // أو $table->foreignId('user_id') ->constrained() ->cascadeOnDelete(); // او $table->foreignId('user_id') ->constrained('users') // تضع إسم الجدول إن لم تقم بإحترام القاعدة في تسمية الجداول و المفاتيح ->cascadeOnDelete(); 1 اقتباس
0 Sam Ahw نشر 18 مارس 2021 أرسل تقرير نشر 18 مارس 2021 إن تنفيذ ذلك بشكل أمثلي وفق التوثيق الرسمي للارافيل يتم عن طريق أحداث Eloquent Events، فيمكنك استخدام الحدث deleting وتنفيذ أي كود مرافق لعملية الحذف كالتالي: class User extends Eloquent { public function photos() { return $this->has_many('Photo'); } public static function boot() { parent::boot(); static::deleting(function($user) { $user->photos()->delete(); // تنفيذ العمليات هنا }); } } بحيث يتم استدعاء التابع قبل عملية الحذف ويتم حذف جميع البيانات المرتبطة بهذا المستخدم. من الأفضل أيضاً استخدام التناقلات transactions ووضع كامل العملية بداخلها لضمان حماية العملية وارتباط عمليات الحذف مع بعضها في حال حدوث أي خطأ. وبهذه الحالة تستطيع أيضاً في المستقبل إجراء أي تعديل على آلية الحذف دون أن يؤثر ذلك على بنية قاعدة البيانات أو الجداول والبيانات الموجودة فيها. 2 اقتباس
السؤال
Amir Alsaeed
لدي جدول للمستخدمين user وأرغب عند حذف مستخدم ما من الجدول:
$user->delete();
أن يقوم تلقائياً بحذف الصور المرتبطة بهذا المستخدم مثلاً:
$this->photo()->delete();
كيف يمكنني تنفيذ ذلك بشكل تلقائي دون الحاجة لكتابة العملية الثانية بشكل يدوي؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.