انتقل إلى محتوى الدرس

Filtering by Relation Existence تصفية النماذج بشرط وجود علاقة

بناء علاقة متعدد لمتعدد عبر belongsToMany وقراءة أعمدة الجدول الوسيط وإدارة الارتباطات بـ attach و sync واستعلام العلاقات بـ whereHas و withCount.
1 صفوف تعليمية
إطار العمل Laravel
0 مشاهدة

شرح صفوف ومحتوى الفقرة

الصف 1 شرح توضيحي

عند استعلام النماذج الأب، كثيراً ما تحتاج لتصفية النتائج بناءً على وجود سجلات مرتبطة بها أو تحقق شروط معينة داخل تلك السجلات. تولد دوال has و doesntHave و whereHas في Eloquent استعلامات فرعية عالية الكفاءة بصيغة EXISTS لتصفية الآباء وفق علاقاتهم.

  • شرط وجود علاقة (has Method): يجلب فقط النماذج الأب التي تمتلك سجلاً مرتبطاً واحداً على الأقل أو عدداً محدداً.
  • تصفية مشروطة بالعلاقة (whereHas): يصفي النماذج الأب عبر تمرير دالة مغلقة تطبق شروطاً مخصصة على الجدول المرتبط.
  • نفي وجود العلاقة (doesntHave): يستخرج السجلات الأب التي لا تمتلك أي سجلات فرعية أو وسيطة مرتبطة بها.
PHP
$taggedPosts = Post::has('tags', '>=', 2)->get();

$laravelPosts = Post::whereHas('tags', function ($q) {
    $q->where('slug', 'laravel');
})->get();