شرح صفوف ومحتوى الفقرة
عند استعلام النماذج الأب، كثيراً ما تحتاج لتصفية النتائج بناءً على وجود سجلات مرتبطة بها أو تحقق شروط معينة داخل تلك السجلات. تولد دوال 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();